2016-03-29 19 views
1

これは、配列の最後のインデックスを+1するのを防ぐための非常に徹底的な方法です。ルビーでこれを達成するためのベストプラクティスは何ですか?前もって感謝します。index + 1 to with with index

array.each.with_index do |x, index| 
    unless index+1 == array.length 
     if x + array[index+1] == n 
     ... 
+0

'[_... 1]'は最初から最後までであるため、 'array [_... 1]'(non-inclusive) 。 –

答えて

3

これを試してみてください:

array[0..-2].each.with_index do |x, index| 
     if x + array[index+1] == n 
     ... 
+0

なぜ ' - 2'ですか? .... –

+1

彼は配列の最後のインデックスにアクセスしたくないので、 – leobelizquierdo

+0

ああ、doh;私の悪い。私自身のコメントには注意を払っていませんでした。私はある期間中断し、あなたのことを間違えた。わーい。 –

3

あなたがやりたい範囲を使用することができます。ような何か:

array = [0, 1, 2, 3, 4] 
array[0...-1].each do |x| 
    print x 
end 
# =>

-1は最後の要素を指し、3つのドット...を使用すると、あなたが独占的に*最後 *を最初からすべての要素を取っていることを意味します。 2ドットには最後のドットも含まれます。

ボーナスのヒント:ルビーでは、の代わりにeach_with_indexの代わりに、あらかじめアレイを間引き/変更することで、ほとんどの時間を無くすことができます。