Clojure: пройти через json и вернуть true или false, в зависимости от результата проверки состояния для каждой пары ключ: значение в данном документе - PullRequest
0 голосов
/ 23 октября 2018

Я пытался вернуть true или false в зависимости от значения, присутствующего в данной хэш-карте.Я пытался использовать Reduced-KV, но это действительно не работает.

, например: {:address {:zip 411045, :city "pune"}, :coupans ["abc" "def"], :cost 200, :items [{:category "partywear", :name "shirt", :price 50.26} {:category "partywear", :name "trouser", :price 10.26}]}

Я хочу написать функцию, которая, если "items.price" = 50.26 and "items.name" = "shirt" ,, должна вернуть trueно "items.price = 10.26 and "items.name" = "shirt" должен вернуть false.

Сначала я сглаживаю массив, а затем меняю ключ на ключ регулярного выражения (def compare_str_regex (clojure.string/replace compare_str #"\[\]" "\\\\[\\[0-9\\]+\\\\]")), например, для items []. price -> items [[0-9] +] .price Затем я использую Reduce-kv для итерации, но проблема в том, что он проверит все документы, которые должны использовать, и условие между двумя отправленными ключами

(reduce-kv (fn [m k v]
             (if (and (re-find (re-pattern compare_str_regex ) k)
                      (op value v))
               (reduced true)
               false))  {} flat_pl_map)

1 Ответ

0 голосов
/ 23 октября 2018

Если правило «вернуть истину, если есть любые записи в коллекции items с :name "shirt" и :price 50.26», то я написал бы эту функцию какэто:

Если это правильно, то я бы написал эту функцию так:

(fn [{:keys [items]}]
  (some (fn [{:keys [name price]}]
          (and (= "shirt" name) (= 50.26 price)))
        items))
...