我有一个包含重复值的表单向量列表。
([2.0 3.0] [2.0 4.0] [2.0 4.0] [2.0 12.0] [2.0 23.0] [2.0 6.0] [2.0 8.0]
[1.0 5.0]p [1.0 9.0] [2.0 8.0] [2.0 16.0] [2.0 19.0] [2.0 13.0]
[2.0 18.0] [1.0 23.0] [2.0 24.0] [2.0 22.0] [2.0 33.0] [2.0 27.0]
[1.0 29.0] [2.0 32.0] [1.0 35.0] [2.0 39.0])我希望使用向量中的第二个值将它们分组到不同的范围。
比如分组(1-5)(6-10).
这里的结果应该是重复的值。
(([2.0 3.0] [2.0 3.0] [2.0 4.0] [2.0 4.0] [1.0 5.0])
([2.0 6.0] [2.0 8.0] [2.0 8.0] [1.0 9.0])
([2.0 12.0] [2.0 13.0])
([2.0 16.0] [2.0 18.0] [2.0 19.0])
([2.0 22.0] [1.0 23.0] [2.0 23.0] [2.0 24.0])
([2.0 27.0] [2.0 29.0])
([2.0 32.0] [2.0 33.0] [1.0 35.0])
([2.0 39.0]))在使用map时,组-by不考虑重复值,只给出不同的值。我希望所有重复的值也被分组。
发布于 2016-10-07 11:49:44
(->> '([2.0 3.0] [2.0 4.0] [2.0 4.0] [2.0 12.0] [2.0 23.0] [2.0 6.0] [2.0 8.0]
[1.0 5.0] [1.0 9.0] [2.0 8.0] [2.0 16.0] [2.0 19.0] [2.0 13.0]
[2.0 18.0] [1.0 23.0] [2.0 24.0] [2.0 22.0] [2.0 33.0] [2.0 27.0]
[1.0 29.0] [2.0 32.0] [1.0 35.0] [2.0 39.0])
(group-by (comp #(Math/ceil (/ % 5)) second))
(sort-by first)
(map second))第一组除以第二个数除以5的结果。
然后按其键对地图进行排序(映射也是键值元组的列表)
然后在此基础上映射second,仅获取每个键的收集值。
发布于 2016-10-06 20:48:58
您可以将group-by与计算桶的函数一起使用。
(defn bucket [v]
(Math/ceil (/ (second v) 5)))
(defn my-grouping [vs]
(-> (group-by bucket vs)
(map (range 1.0 8.0)))) ; quick range hack, should calculate from input我不认为这只会带来不同的价值。
(我把正确范围的计算留给了读者。)
https://stackoverflow.com/questions/39904148
复制相似问题