Отфильтровать значения nil от карты Clojure? Каков наилучший способ фильтрации значений nil из карты Clojure {}? { :a :x :b nil :c :z } ;;=> { :a :x, :c :z } Ответ 1 Я бы использовал: (into {} (filter (comp some? val) {:a :x, :b nil, :c :z})) => {:a :x, :c :z} Выполнение some? check явно важно, потому что, если вы просто выполняете (into {} (filter val {...})), вы ошибочно удаляете значения, которые являются логическими false. Ответ 2 Я использую следующий код: (into {} (filter val {:a 1, :b 2, :c nil})) ;;=> {:a 1, :b 2} ПРИМЕЧАНИЕ: это приведет к удалению ложных значений, а также nils Ответ 3 Вероятно, это не лучшее решение, но здесь, которое использует понимание списка: (into {} (for [[k v] {:a 1 :b nil :c :z} :when (not (nil? v))] [k v])) Ответ 4 (into {} (keep (fn [e] (if (val e) e)) {:a :x :b nil :c :z})) ;;=> {:a :x, :c :z} или немного короче: (into {} (keep #(if (val %) %) {:a :x :b nil :c :z})) На самом деле, ваше предложение фильтра намного лучше и короче, поэтому я бы просто использовал это: (into {} (filter val {:a :x :b nil :c :z})) Ответ 5 Самый приятный способ сделать это на самом деле (into {} (keep second {:a :x :b nil}))
Ответ 1 Я бы использовал: (into {} (filter (comp some? val) {:a :x, :b nil, :c :z})) => {:a :x, :c :z} Выполнение some? check явно важно, потому что, если вы просто выполняете (into {} (filter val {...})), вы ошибочно удаляете значения, которые являются логическими false.
Ответ 2 Я использую следующий код: (into {} (filter val {:a 1, :b 2, :c nil})) ;;=> {:a 1, :b 2} ПРИМЕЧАНИЕ: это приведет к удалению ложных значений, а также nils
Ответ 3 Вероятно, это не лучшее решение, но здесь, которое использует понимание списка: (into {} (for [[k v] {:a 1 :b nil :c :z} :when (not (nil? v))] [k v]))
Ответ 4 (into {} (keep (fn [e] (if (val e) e)) {:a :x :b nil :c :z})) ;;=> {:a :x, :c :z} или немного короче: (into {} (keep #(if (val %) %) {:a :x :b nil :c :z})) На самом деле, ваше предложение фильтра намного лучше и короче, поэтому я бы просто использовал это: (into {} (filter val {:a :x :b nil :c :z}))