Rails,评估数字是否按顺序排列

时间:2012-10-15 21:02:31

标签: arrays ruby-on-rails-3

有没有办法评估数组的顺序?我想找到一个由created_at日期排序的记录数组,然后查看该数组中的数字是否按顺序排列?

例如:

  Model.all.order(&:created_at).select("lesson_number)
  [1, 2, 4, 3, 5]

应该失败,因为数字不是按顺序

我可以执行两个发现。一个按“lesson_number”排序,另一个按created_at日期排序。将它们转换为字符串然后比较两者。但是,如果存在rails方法来处理这样的事情,似乎需要做很多工作。

1 个答案:

答案 0 :(得分:1)

您可以在Ruby中结合使用几种方法来非常有效地执行此操作。

input.each_cons(2).reduce(true) { |result, (a, b)| result && (a <=> b) < 0 }

each_cons将遍历你的数组,在这种情况下,每两个连续项。因为我们没有将它传递给一个块,所以它返回一个枚举器,我们可以使用reduce(a.k.a。inject)迭代并获得一个结果值。

我们的块使用a比较b<=>,它将返回-1,0或1,具体取决于第一个值是“小于”,等于还是“比...更棒”。在这种情况下,我们希望确保a-1

如果你不熟悉它,块参数中的括号是Ruby 1.9+,它们允许参数被喷溅(否则我们会在块中得到一个2项数组)。