今天下午捣乱我的大脑试图弄清楚这个。我对Clojure和Lisp很新。我有一个数据结构,它是一个地图矢量,我希望将所有地图中的特定键的所有值都放到另一个矢量中。
例如,假设这是绑定到myvec的地图矢量:
[ { "key1" "value1" "key2" "value2"} {"key1" "value3" "key2" "value4"} ]
我想要一个看起来像
的矢量[ "value1" "value3" ]
由键“key1”
的所有值组成我能想到的唯一方法是
(for [i (range (count(myvec)))] ((myvec i) "key1"))
有更简单的方法吗?好像一定有。
感谢。
答案 0 :(得分:19)
(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)))