Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Arrayクラス > slice!

instance method Array#slice!

slice!(nth) -> object | nil

指定した要素を自身から取り除き、取り除いた要素を返します。取り除く要素がなければ nil を返します。

[PARAM] nth:
取り除く要素のインデックスを整数で指定します。Array#[] と同じです。

例:

a = [ "a", "b", "c" ]
a.slice!(1)     #=> "b"
a               #=> ["a", "c"]
a.slice!(-1)    #=> "c"
a               #=> ["a"]
a.slice!(100)   #=> nil
a               #=> ["a"]
slice!(start, len) -> Array | nil
slice!(range) -> Array | nil

指定した部分配列を自身から取り除き、取り除いた部分配列を返します。取り除く要素がなければ nil を返します。

以下のコードと同値です。

def slice!(*args)
   result = self[*args]
   self[*args] = nil
   result
end

ですので以下のように配列の長さが拡張される場合もありえます。

a = [ "a", "b", "c" ]
p a.slice!(5, 1)       #=> nil
p a                    #=> ["a", "b", "c", nil, nil]
[PARAM] start:
削除したい部分配列の先頭のインデックスを整数で指定します。Array#[] と同じです。
[PARAM] len:
削除したい部分配列の長さを整数で指定します。Array#[] と同じです。
[PARAM] range:
削除したい配列の範囲を Range オブジェクトで指定します。Array#[] と同じです。
[EXCEPTION] IndexError:
指定された範囲の始点が自身の始点より前にある場合に発生します。

例:

a = [ "a", "b", "c" ]
a.slice!(1, 2)     #=> ["b", "c"]
a                  #=> ["a"]

a = [ "a", "b", "c" ]
a.slice!(1, 0)     #=> []
a                  #=> [ "a", "b", "c" ]

a = [ "a", "b", "c" ]
a.slice!(-10, 1)   #=> IndexError
class Array