在Clojure中将元组数组转换为哈希映射

Man*_*tis 34 tuples clojure hashmap map

我有一个元组数组,其中每个元组都是一个带有键和值的2元组.将这个元组数组转换为哈希映射的最简洁方法是什么?

Phe*_*liX 48

user=> (into {} [[:a 1] [:b 2]])
{:a 1, :b 2}
Run Code Online (Sandbox Code Playgroud)


kot*_*rak 5

假设"tupel"意味着"two-elememt array":

(reduce 
  (fn [m tupel] 
      (assoc m 
            (aget tupel 0) 
            (aget tupel 1))) 
  {} 
  array-of-tupels)
Run Code Online (Sandbox Code Playgroud)


min*_*49r 5

地图是一系列MapEntry元素.每个MapEntry都是键和值的向量.问题中的元组已经是MapEntry的形式,这使事情变得方便.(这也是into解决方案很好的原因.)

user=> (reduce conj {} [[:a 1] [:b 2]])
{:b 2, :a 1}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的解释!因此,只有2个元素的向量是MapEntry,因此(进入{} [[:a 1] {:b 2}])将起作用,但是(进入{} ['(:a 1){:b 2}])将不工作.它得到错误"java.lang.ClassCastException:clojure.lang.Keyword不能转换为java.util.Map $ Entry".我想知道为什么Clojure在这种情况下不能以相同的方式处理所有2个元素序列.它会使它更加一致.它不是的原因是什么? (2认同)