在clojure中有条件地从地图矢量中提取值

时间:2016-03-16 10:12:02

标签: clojure

此代码从地图矢量中提取所有值。

(def vector-of-maps [{:a "1" :b "2"}{:a "3" :b "4"}])
(mapcat vals vector-of-maps)

所以我明白了 (" 1"" 2"" 3"" 4")

我想只从:a 获取值 (" 1"" 3")

我可以用它做什么?

2 个答案:

答案 0 :(得分:6)

(def vector-of-maps [{:a "1" :b "2"} {:a "3" :b "4"}])
(map :a vector-of-maps)

产量

("1" "3")

map:a作为一个函数应用,它将从vector-of-maps中的每个值中提取值。

答案 1 :(得分:1)

你可以这样做:

(map val (filter (comp #{:a} key) (apply concat vector-of-maps)))

说明:

  1. apply concat将一系列地图转换为所有这些地图中所有键值对的序列
  2. filter (comp #{:a} key)仅保留其键位于单元素集#{:a}
  3. 中的键值对
  4. map val获取每个剩余键值对的值
  5. 示例:

    (def vector-of-maps [{:a "1" :b "2"} {:a "3" :b "4"}])
    
    (map val (filter (comp #{:a} key) (apply concat vector-of-maps)))
    ;=> ("1" "3")