以下代码:
(into {} [[:a 1][:b 2][:c 3][:d 4][:e 5]])
...生成关键字/值对的映射(?)。我不太明白双方括号的重要性,我假设它是一个解构的例子?
谢谢,
〜凯特琳
答案 0 :(得分:7)
这不是destructuring,只是使用into
core function的一个例子。
into
是一个函数,用于通过重复将第二个集合中的元素添加到带有conj
function的第一个集合中来结合两个集合。
因此,(into {} [[:a 1][:b 2]])
只是
(-> {} (conj [:a 1]) (conj [:b 2]))
答案 1 :(得分:1)
这个答案是对列昂尼德的补充。人们可以将Clojure地图视为"地图条目",键/值对的集合。这些有时被打印,因此它们看起来像2元素向量,尽管它们不是2元素向量。然而,如果你想使用into
将某些内容转换为地图,那么你应该以2元素向量的形式传递将转化为地图条目的数据。
=> (def foo {:a 1 :b 2 :c 3})
#'/foo
=> (find foo :b)
[:b 2]
=> (class (find foo :b))
clojure.lang.MapEntry
=> (map identity foo)
([:c 3] [:b 2] [:a 1])
=> (map class (map identity foo))
(clojure.lang.MapEntry clojure.lang.MapEntry clojure.lang.MapEntry)
=> (list [:c 3] [:b 2] [:a 1])
([:c 3] [:b 2] [:a 1])
=> (map class (list [:c 3] [:b 2] [:a 1]))
(clojure.lang.PersistentVector clojure.lang.PersistentVector clojure.lang.PersistentVector)