Clojure - 从散列图矢量中提取值

时间:2011-04-19 23:39:01

标签: clojure

今天下午捣乱我的大脑试图弄清楚这个。我对Clojure和Lisp很新。我有一个数据结构,它是一个地图矢量,我希望将所有地图中的特定键的所有值都放到另一个矢量中。

例如,假设这是绑定到myvec的地图矢量:

[ { "key1" "value1" "key2" "value2"} {"key1" "value3" "key2" "value4"} ]

我想要一个看起来像

的矢量
[ "value1" "value3" ]

由键“key1”

的所有值组成

我能想到的唯一方法是

(for [i (range (count(myvec)))] ((myvec i) "key1"))

有更简单的方法吗?好像一定有​​。

感谢。

2 个答案:

答案 0 :(得分:19)

应该只需要{p> (map #(get % "key1") myvec)。考虑使用:关键字而不是“字符串”作为键,因为它通常更好,更惯用。另外,您可以将其写为(map :key1 myvec)

答案 1 :(得分:10)

(let [v [{"key1" "value1", "key2" "value2"} {"key1" "value3", "key2" "value4"}]]
  (vec (map #(% "key1") v)))

如果您为密钥使用关键字:

(let [v [{:key1 "value1", :key2 "value2"} {:key1 "value3", :key2 "value4"}]]
  (vec (map :key1 v)))

如果您不希望在地图没有给定密钥时包含nil值:

(let [v [{:key1 "value1", :key2 "value2"} {:key1 "value3", :key2 "value4"} {:key2 "value5"}]]
  (vec (keep :key1 v)))