0

配列の順序を評価する方法はありますか? created_at 日付で並べ替えられたレコードの配列を見つけて、その配列内の数字が連続しているかどうかを確認したいですか?

例えば:

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

番号が連続していないため、失敗するはずです

2 つの検索を実行できました。「lesson_number」で並べられたものと、created_at 日付で並べられたものです。両方を文字列に変換してから、2 つを比較します。しかし、そのようなことを処理するための Rails メソッドが存在する場合、多くの作業のように思えます。

4

1 に答える 1

1

Ruby のいくつかのメソッドを組み合わせて、これをかなり効率的に行うことができます。

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

each_cons配列を反復処理して、この場合は連続する 2 つの項目を生成します。ブロックを渡さないため、reduce(aka inject) を使用して反復処理し、単一の結果値を取得できる列挙子を返します。

このブロックは、最初の値が「より小さい」、「等しい」、または「より大きい」かどうかに応じて、-1、0、または 1 を返しaますb<=>この場合、 であることを確認したいと思いaます-1

ご存じない方のために説明すると、ブロック引数の括弧は Ruby 1.9+ であり、引数を分割することができます (そうしないと、ブロックで 2 項目の配列が取得されます)。

于 2012-10-15T21:11:47.153 に答える