如何将列表或向量中的值放入地图?
我是按照以下方式做的,但看起来并不简单:
user=> (into {} (map #(into [] %) (partition 2 [1 2 3 4 5 6])))
{1 2, 3 4, 5 6}
user=>
或者,如果我还想处理奇数个值(虽然可能不值得,但可能保留键):
user=> (into {} (map #(if (even? (count %))
#_=> (into [] %)
#_=> [(first %) nil])
#_=> (partition-all 2 [1 2 3 4 5])))
{1 2, 3 4, 5 nil}
user=>
有更简单的方法吗?
答案 0 :(得分:3)
过敏性条件版本,测试矢量和列表,偶数和奇数。
(defn seq->map
[s]
(let [s+ (concat s [nil])]
(zipmap (take-nth 2 s+)
(take-nth 2 (rest s+)))))
(seq->map '(1 2 3 4)) ; {3 4, 1 2}
(seq->map '(1 2 3 4 5)) ; {5 nil, 3 4, 1 2}
(seq->map [1 2 3 4]) ; {3 4, 1 2}
(seq->map [1 2 3 4 5]) ; {5 nil, 3 4, 1 2}
答案 1 :(得分:2)
以下函数应该处理这两种情况(假设Vector作为参数传递给to-map):
(defn to-map [v]
(apply hash-map
(if (odd? (count v))
(conj v nil)
v)))