私は右の質問を理解していれば、私のようなものでいいと思う:
def some_method_name(array)
array.select.with_index { |*ij|
ij.all?(&:even?)
}
end
puts some_method_name([0, 1, 2, 3, 4, 5, 10, 13, 21, 22, 30])
# >> 0
# >> 2
# >> 4
# >> 10
# >> 30
ここで
は、それがやっているものです:
def some_method_name(array)
array.select.with_index { |*ij|
ij # => [0, 0], [1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [10, 6], [13, 7], [21, 8], [22, 9], [30, 10]
ij.all?(&:even?) # => true, false, true, false, true, false, true, false, false, false, true
}
end
puts some_method_name([0, 1, 2, 3, 4, 5, 10, 13, 21, 22, 30])
# >> 0
# >> 2
# >> 4
# >> 10
# >> 30
元のコードにはいくつか問題があります。
while
ループを使用すると、off-by-oneエラー、またはトリガしないループ、または決して終了しないループの問題が発生しやすくなります。
はRubyでそれに対処するために、我々は、次に、その上にロジックをベースアレイ上にループにeach
とmap
、select
、reject
又は同様のイテレータを使用し、各要素を処理します。
array.select
各要素を見て、ブロック内の論理を適用すること、「truthy」結果を探しています。 with_index
は、反復のインデックスをブロックに渡された第2の値として追加します。 *id
は、2つの値を配列に渡すので、all?
とそのeven?
テストを簡単に適用できます。 even?
戻りtrue
all?
両方その後にトリガする場合、配列の要素を返すためにselect
に信号true
再度を返します。
これは、I = 6ループが実行され、 '配列は、[6]' 'nil'使用は'私は
engineersmnky
共通array.length'でいるときので、常にこれらの注意する必要があります! – Anthony
.evenを使用する必要がありますか?メソッドを使用する代わりに – Gregory