如何在没有键的情况下将地图转换为集合

How to convert a map into a collection without the keys

我有这样一张地图:

{1 [1 4 7], 2 [2 5 8], 0 [3 6 9]}

我想写一个函数 returns 这个:

[[1 4 7] [2 5 8] [3 6 9]]

附带说明一下,我通过以下方式获取地图:

(group-by #(mod % 3) [1 2 3 4 5 6 7 8 9])

如果有人有从这样的向量 [1 2 3 4 5 6 7 8 9] 到上面显示的第二个向量的捷径,请告诉我!

顺序重要吗? vals 是一张地图,returns 是一个值序列。但是没有为映射定义顺序,因此返回值序列的顺序是任意的。

> (vals {1 [1 4 7], 2 [2 5 8], 0 [3 6 9]})
([3 6 9] [1 4 7] [2 5 8])

已排序:

> (sort (vals {1 [1 4 7], 2 [2 5 8], 0 [3 6 9]}))
([1 4 7] [2 5 8] [3 6 9])

关于你的另一个问题:(partition 3 v) 创建一个矩阵,(apply map vector m) 是转置矩阵 m 的惯用语(它是如何工作的?练习 reader 或 google它)。所以:

> (apply map vector (partition 3 [1 2 3 4 5 6 7 8 9]))
([1 4 7] [2 5 8] [3 6 9])

当然还有其他方法。例如,解构:

> (let [{ a 0 b 1 c 2 } (group-by #(mod % 3) [1 2 3 4 5 6 7 8 9])] [b c a])
[[1 4 7] [2 5 8] [3 6 9]]