完全を期すために、「配列の最初の x エントリの削除」を実現し、元の配列に影響を与えずに配列の残りの要素を取得する別の方法を追加します。これは、Enumerable モジュールでのドロップの仕組みです。
arr = [1,2,3,4,5]
arr - arr[0..2]
=> [4, 5]
arr
=> [1, 2, 3, 4, 5]
実際、配列のドキュメントで指定されているように、 [] はスライスのエイリアスです。
ary[index] → obj or nil
ary[start, length] → new_ary or nil
ary[range] → new_ary or nil
slice(index) → obj or nil
slice(start, length) → new_ary or nil
slice(range) → new_ary or nil
貢献した今、私はドロップ アンド シフトの方が好きだと言いたいです。
drop は Enumerable のインスタンス メソッドであるため、Array や Hash など、Enumerable モジュールを実装するクラスを持つ任意のオブジェクトに適用できます。したがって、Enumerable オブジェクトで呼び出されます。ただし、drop は配列の残りの要素を返します。したがって、指定された要素を削除し、残りを返します。
[1,2,3,4,5].drop(2)
=> [3, 4, 5]
{a: 'a', b: 'b', c: 'c'}.drop(2)
=> [[:c, "c"]]
Enumerable オブジェクトに関係なく、戻り値は配列の残りの要素であることに注意してください。回答がすでに述べているように、元のオブジェクトは変更されていません。
shift メソッドは Array に実装されており、Enumerable オブジェクトではないため、Array にのみ適用できます。Shift は配列から削除された要素を返します。配列自体を変更したため、配列を保持する変数を介して残りの要素に引き続きアクセスできます。
arr = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
arr.shift(2)
=> [1, 2]
arr
=> [3, 4, 5]
最終的に、これを行うには多くの方法があり、応答に何を求めているか、および配列が変更されているかどうかを気にするかどうかによって異なります。