5

配列が増加しているかどうかを確認する方法があるかどうか疑問に思っていますか?

これが私の解決策ですが、私はもっと美しい方法を探しています:

n = - 1

@arr.flatten.each { |e| 
    return false if e < n
    n = e
}
4

2 に答える 2

5

次のことができます。

> arr = [1, 4, 5, 6]
> arr.each_cons(2).all? { |a, b| (a <=> b) <= 0 }
 => true

配列クラスに追加できます

class Array
  def is_sorted?
    each_cons(2).all? { |a, b| (a <=> b) <= 0 }
  end
end
于 2013-03-25T12:13:08.873 に答える
3

これを試して、

if @arr.sort.uniq == @arr
  # array is increasing
else 
  # array not increasing
end

これにより、配列が並べ替えられ、重複する値が削除されてから、元の配列と比較されます。

元の配列が常に増加している場合は、並べ替えられ、複製が解除された配列と一致する必要があります。

編集:

このソリューションは望ましい結果をもたらしますが、これは最善のソリューションではありません(以下のコメントを参照)。代わりに、tochのソリューションを使用することをお勧めします。

于 2013-03-25T12:06:23.337 に答える