如何将地图转换为序列?

时间:2014-05-01 05:37:16

标签: clojure

this question的答案解释了如何将地图,序列等转换为各种序列和集合,但没有说明如何将地图转换为交替键和值的序列。这是一种方式:

(apply concat {:a 1 :b 2})
=> (:b 2 :a 1)

人们可能天真地想到的一些替代方案会产生相同的结果,包括将地图传递给vecvectorseqsequence,{ {1}},into []into ()。 (有时候尝试它比思考它更容易。)

有什么比flatten更简单吗?

2 个答案:

答案 0 :(得分:1)

您也可以

(mapcat identity {:a 1 :b 2})

(mapcat seq {:a 1 :b 2})

答案 1 :(得分:0)

正如@noisesmith在下面轻轻暗示,以下答案是诱人的,但错误:留给其他不警觉的灵魂警告!反例:

((comp flatten seq) {[1 2] [3 4], 5 [6 7]})
; (1 2 3 4 5 6 7)

(comp flatten seq)完成工作:

((comp flatten seq) {1 2, 3 4})
; (1 2 3 4)

flatten本身并不是:

(flatten {1 2, 3 4})
; ()

我很惊讶它不起作用,在这种情况下它应该返回nil,而不是()

您提到的其他人:vecvector ...,对地图将其自身显示为序列的各个 [键值] 对执行任何操作的。