【发布时间】:2011-05-18 17:47:04
【问题描述】:
我有一个元组数组,其中每个元组是一个 2 元组,带有一个键和一个值。将这个元组数组转换为哈希映射的最干净的方法是什么?
【问题讨论】:
标签: clojure map hashmap tuples
我有一个元组数组,其中每个元组是一个 2 元组,带有一个键和一个值。将这个元组数组转换为哈希映射的最干净的方法是什么?
【问题讨论】:
标签: clojure map hashmap tuples
地图是一系列 MapEntry 元素。每个 MapEntry 都是一个键和值的向量。问题中的元组已经采用 MapEntry 的形式,这使事情变得方便。 (这也是为什么into 解决方案很好的原因。)
user=> (reduce conj {} [[:a 1] [:b 2]])
{:b 2, :a 1}
【讨论】:
user=> (into {} [[:a 1] [:b 2]])
{:a 1, :b 2}
【讨论】:
(map vec ...):(into {} (map vec an-array-of-two-element-arrays))。
vec?我认为vec 只是将数组保持原样......
user=> (def a [[:a 4] [:b 6]])
user=> (apply hash-map (flatten a))
{:a 4, :b 6}
【讨论】:
flatten 对于这个问题来说太过分了。您可以利用 MapEntry(键和值的向量)形式的元组。
flatten:如果它们恰好是数据结构,它也会很高兴地扁平化所有键和值!
假设“tupel”表示“二元数组”:
(reduce
(fn [m tupel]
(assoc m
(aget tupel 0)
(aget tupel 1)))
{}
array-of-tupels)
【讨论】:
(aget t n),您可以使用 (t n),这有点漂亮。
(t n) 不适用于序列。它与向量有关。但是你可以简单地使用(into {} array-of-vectors) 而不是reduce。