this question的答案解释了如何将地图,序列等转换为各种序列和集合,但没有说明如何将地图转换为交替键和值的序列。这是一种方式:
(apply concat {:a 1 :b 2})
=> (:b 2 :a 1)
人们可能天真地想到的一些替代方案会产生相同的结果,包括将地图传递给vec
,vector
,seq
,sequence
,{ {1}},into []
和into ()
。 (有时候尝试它比思考它更容易。)
有什么比flatten
更简单吗?
答案 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
,而不是()
。
您提到的其他人:vec
,vector
...,对地图将其自身显示为序列的各个 [键值] 对执行任何操作的。