我有这样的地图:
{1 [1 4 7], 2 [2 5 8], 0 [3 6 9]}
我想编写一个返回此函数的函数:
[[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]
到上面显示的第二个,请告诉我!
答案 0 :(得分:3)
至于你的另一个问题:(partition 3 v)
创建一个矩阵,而(apply map vector m)
是一个用于转置矩阵m的习惯用法(它是如何工作的?为读者练习或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]]
答案 1 :(得分:2)
订单有关系吗? vals
采用地图,并返回一系列值。但是没有为地图定义顺序,因此返回的值序列的顺序是任意的。
> (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])