使用clojure对不同范围的向量进行分组

使用clojure对不同范围的向量进行分组,clojure,Clojure,我有一个向量列表,也有重复的值 ([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

我有一个向量列表,也有重复的值

([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])
(([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]))
我想使用向量中的第二个值将它们分组到不同的范围

类似于((1-5)(6-10)中的分组

这里的结果也应该是重复值

([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])
(([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时,group by不考虑重复值,只给出不同的值。我希望所有重复的值也被分组。

您可以使用
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
我不认为这应该只给出不同的值

(我将正确范围的计算留给读者作为练习。)

第一组由第二个数字的四舍五入除以5得出
然后按键对映射进行排序(映射也是键值元组列表)

然后将
second
映射到上面,仅获取每个键的收集值

问题中的两个代码块是否是您试图编写的表达式的输入和所需输出?@Arthurlfeldt Yess!我能知道你是怎么定义“v”和“v”的吗?当我定义bucket时,它说没有匹配的方法ceil。但我知道ceil的用法是(int(Math/ceil(/32)))。我是新用水桶的。@joey是的,他的
Math/ceil
调用被错误地使用了。他的最后一行也只有在第二个数字不超过40的情况下才有效。
v
是一个向量,
vs
是输入列表。@BrandonH:除了这会漏掉空组之外。我不知道这里的期望是什么。