2010-12-01 126 views

回答

47
user=> (into {} [[:a 1] [:b 2]]) 
{:a 1, :b 2} 
5

假設 「三元組」 是指 「雙elememt陣列」:

(reduce 
    (fn [m tupel] 
     (assoc m 
      (aget tupel 0) 
      (aget tupel 1))) 
    {} 
    array-of-tupels)
+0

不錯。如果你的(對於OP)「數組」實際上是一個seq,而不是`(age t n)`,你可以使用`(t n)`,這有點漂亮。 – Isaac 2010-12-01 20:49:10

+0

`(t n)`不適用於序列。它與矢量。但是,你可以簡單地使用`(進入{}向量數組')而不是`reduce'。 – kotarak 2010-12-02 14:12:42

4
user=> (def a [[:a 4] [:b 6]]) 
user=> (apply hash-map (flatten a)) 
{:a 4, :b 6} 
+2

`flatten`對於這個問題是矯枉過正的。您可以利用以MapEntry(鍵和值的向量)形式存在的元組。 – miner49r 2011-04-22 19:12:08

+1

永遠不要使用`flatten`來處理這樣的情況:如果它們碰巧是數據結構,它將會愉快地平滑所有的鍵和值。 – 2016-07-07 20:36:15

5

地圖是MapEntry元素的序列。每個MapEntry都是一個鍵和值的向量。問題中的元組已經以MapEntry的形式出現,這使得方便。 (這也是爲什麼into解決方案是好的。)

user=> (reduce conj {} [[:a 1] [:b 2]]) 
{:b 2, :a 1}