Извлечение набора значений из коллекции карт по определенным ключам - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь извлечь набор значений из коллекции карт по определенным ключам.Например,

Ввод:

[
    {:k1 "v1" :k2 "v2" :k3 "v3"} 
    {:k1 "v4" :k2 "v2"}
]

Предполагается, что получение набора значений осуществляется посредством: k1,: k2

Желаемый вывод:

#{"v1" "v2" "v4"}

Итак, мое решение -

(->> [{:k1 "v1" :k2 "v2" :k3 "v3"}
      {:k1 "v4" :k2 "v2"}]
     (map #(-> (select-keys % [:k1 :k2]) (vals) (set)))
     (apply clojure.set/union))

Но я хочу знать лучшие способы.Что ты думаешь?

1 Ответ

0 голосов
/ 28 декабря 2018

Используя into и преобразователь, мы можем сделать следующее:

(def input [{:k1 "v1" :k2 "v2" :k3 "v3"} {:k1 "v4" :k2 "v2"}])
(into #{} (mapcat (juxt :k1 :k2)) input) => #{"v4" "v1" "v2"}

В качестве альтернативы мы можем использовать композицию cat и map вместо mapcat:

(into #{} (comp (map (juxt :k1 :k2)) cat) input) => #{"v4" "v1" "v2"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...