ruby-on-rails - ROR 按时间上彼此的接近程度进行分组

标签 ruby-on-rails ruby activerecord group-by grouping

我已经很多年没有编写任何代码了,所以请原谅我愚蠢的问题,但如果项目按时间戳接近,我想对它们进行分组。我的意思是,例如,彼此相距不到 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/

相关文章:

ruby-on-rails - 使用 redis ruby​​ gem,如何从匹配模式的 redis 中清除一组键?

ruby-on-rails - 在 Ruby on Rails 中读取 header 数据

ruby-on-rails - <%= form_tag 和 <% form_tag 之间的区别

mysql - 使用 CodeIgniter Active Record 计算子行不返回所有结果

ruby-on-rails - rails//白天按时区查询

ruby-on-rails - RSpec - 获取描述类

ruby 码 : ENV ['FOO' ] without link

ruby-on-rails - 我如何遍历哈希的哈希?

mysql - 如果有非法字符,如何将密文保存到数据库?

mysql - 在 ActiveRecord 中按星期几进行分组、排序和计数