2012-10-15 96 views
0

有沒有一種方法來評估數組的順序?我想查找由created_at date排序的記錄數組,然後查看該數組中的數字是否按順序排列?Rails,評估數字是否順序

例如:

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

應該失敗,因爲該號碼不按順序

我可以執行兩個發現。一個按「lesson_number」排序,另一個按created_at日期排序。將它們都轉換爲一個字符串,然後比較兩者。但是,如果存在一個Rails方法來處理這樣的事情,那麼看起來像很多工作。

+0

另一個資源給你http://stackoverflow.com/questions/5682940/check-if-array-of-integers-increments-in-ruby – slapthelownote

回答

1

您可以在Ruby中結合使用幾種方法來非常有效地完成此操作。

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

each_cons將通過您的陣列迭代得到,在這種情況下,每次2個連續項。因爲我們沒有將它傳遞給一個塊,所以它返回一個枚舉器,我們可以遍歷該枚舉器並使用reduce(又名inject)獲得單個結果值。

我們的區塊比較ab使用<=>這將返回-1,0或1取決於第一個值是「小於」,等於還是「大於」。在這種情況下,我們要確保a-1

如果你不熟悉它,block參數中的圓括號是Ruby 1.9+,並且它們允許將參數設置爲splatted(否則我們會在我們的塊中得到2項數組)。