Конвертировать массив кортежей в хэш-карту в Clojure - PullRequest
34 голосов
/ 01 декабря 2010

У меня есть массив кортежей, где каждый кортеж представляет собой 2 кортежа с ключом и значением. Какой самый простой способ преобразовать этот массив кортежей в хэш-карту?

Ответы [ 4 ]

48 голосов
/ 02 декабря 2010
user=> (into {} [[:a 1] [:b 2]])
{:a 1, :b 2}
5 голосов
/ 22 апреля 2011

Карта - это последовательность элементов MapEntry.Каждый MapEntry является вектором ключа и значения.Кортежи в вопросе уже имеют форму MapEntry, что делает вещи удобными.(Именно поэтому решение into является хорошим.)

user=> (reduce conj {} [[:a 1] [:b 2]])
{:b 2, :a 1}
5 голосов
/ 01 декабря 2010

Предполагая, что "tupel" означает "массив из двух элементов":

(reduce 
  (fn [m tupel] 
      (assoc m 
            (aget tupel 0) 
            (aget tupel 1))) 
  {} 
  array-of-tupels)
3 голосов
/ 02 декабря 2010
user=> (def a [[:a 4] [:b 6]])
user=> (apply hash-map (flatten a))
{:a 4, :b 6}
...