我已经很多年没有编写任何代码了,所以请原谅我愚蠢的问题,但如果项目按时间戳接近,我想对它们进行分组。我的意思是,例如,彼此相距不到 5 分钟的项目将被递归分组。我所说的递归是指第一个和最后一个项目彼此之间的距离不必少于 5 分钟,但它们之间需要有与前一个和下一个项目的距离都小于 5 分钟的项目。因此,我需要的是一种将当前项目与前一个项目进行比较的方法,如果它们彼此之间的距离小于 5 分钟,则将当前项目添加到与前一个项目相同的组中。
ActiveRecord 解决方案会很好,因为项目数量非常大!
问题是使用group_by,我无法找到前一项,以便我可以比较时间戳。我尝试过一些像这样的愚蠢的东西只是为了比较这些项目:
a.group_by { |x| x.created_at == a[a.index(x)-1].created_at }
但我得到:
NoMethodError: undefined method `created_at' for nil:NilClass
有没有办法使用 group_by 来执行此操作,或者我是否需要“手动”迭代这些项目?由于项目数量相当大,有什么关于非常有效的解决方案的建议吗?
谢谢!
最佳答案
Set 有一个 divide
函数来完成这个任务!你需要这样的东西:
Set[*a].divide { |x,y| (x-y).abs <= 5}
关于ruby-on-rails - ROR 按时间上彼此的接近程度进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267471/