Clojure 通过特定键从地图集合中提取一组值

Clojure 通过特定键从地图集合中提取一组值,clojure,Clojure,我试图通过特定键从地图集合中提取一组值。比如说, 输入: [ {: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

我试图通过特定键从地图集合中提取一组值。比如说,

输入:

[
    {: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))

但我想知道更好的方法。你觉得怎么样?

使用
和传感器,我们可以执行以下操作:

(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"}

使用
进入
和传感器,我们可以执行以下操作:

(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"}

谢谢这对我来说真的很好,更加清晰和简洁。:)谢谢这对我来说真的很好,更加清晰和简洁。:)