言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. 配列.insert / delete / delete_at / compact

配列.insert / delete / delete_at / compact

対応: Ruby 1.8(2003)

配列の任意の位置に要素を追加・削除したり、『nil』を取り除いたりするメソッドです。

構文

# 指定した位置に要素を挿入します。
配列.insert(インデックス, 要素, ...)

# 指定した値の要素をすべて削除します。
配列.delete(値)
配列.delete(値) { 見つからなかった場合の戻り値 }

# 指定したインデックスの要素を削除します。
配列.delete_at(インデックス)

# nil 要素を取り除いた新しい配列を返します。
配列.compact

# nil 要素を直接取り除きます(破壊的)。
配列.compact!

メソッド一覧

メソッド概要
insert(idx, elem, ...)指定したインデックスの位置に要素を挿入します。負のインデックスを指定した場合は末尾からの位置になります。
delete(val)指定した値に一致するすべての要素を削除し、削除した値を返します。見つからない場合は『nil』を返します。
delete_at(idx)指定したインデックスの要素を削除し、その要素を返します。
compact配列から『nil』を除いた新しい配列を返します。元の配列は変更されません。
compact!元の配列から直接『nil』を除去します。変更があれば配列自身を、なければ『nil』を返します。

サンプルコード

sample_array_insert_delete_compact.rb
members = ["狡噛慎也", "常守朱", "宜野座伸元"]

# insert でインデックス1の位置に挿入します。
members.insert(1, "征陸智己")
puts members.inspect  # ["狡噛慎也", "征陸智己", "常守朱", "宜野座伸元"]

# 複数の要素を同時に挿入できます。
members.insert(2, "唐之杜志恩", "征陸智己")
puts members.inspect  # ["狡噛慎也", "征陸智己", "唐之杜志恩", "征陸智己", "常守朱", "宜野座伸元"]

# delete で値を指定して削除します。
members.delete("征陸智己")
puts members.inspect  # ["狡噛慎也", "唐之杜志恩", "常守朱", "宜野座伸元"]

# 見つからない場合のデフォルト値をブロックで指定します。
result = members.delete("霜月美佳") { "見つかりませんでした" }
puts result  # 見つかりませんでした

# delete_at でインデックスを指定して削除します。
removed = members.delete_at(0)
puts removed   # 狡噛慎也
puts members.inspect   # ["唐之杜志恩", "常守朱", "宜野座伸元"]

# compact で nil を除去します。
data = [1, nil, 2, nil, 3, nil]
puts data.compact.inspect  # [1, 2, 3]
puts data.inspect           # [1, nil, 2, nil, 3, nil](元は変わらない)

# compact! で元の配列を直接変更します。
data.compact!
puts data.inspect  # [1, 2, 3]
ruby array_insert_delete_compact.rb
["狡噛慎也", "征陸智己", "常守朱", "宜野座伸元"]
["狡噛慎也", "征陸智己", "唐之杜志恩", "征陸智己", "常守朱", "宜野座伸元"]
["狡噛慎也", "唐之杜志恩", "常守朱", "宜野座伸元"]
見つかりませんでした
狡噛慎也
["唐之杜志恩", "常守朱", "宜野座伸元"]
[1, 2, 3]
[1, nil, 2, nil, 3, nil]
[1, 2, 3]

概要

『insert』は配列の中間に要素を追加する場合に使います。末尾への追加なら『push』や『<<』の方が高速です。『delete』は値を指定して削除し、『delete_at』はインデックスを指定して削除します。

『delete』は一致するすべての要素を削除するため、同じ値が複数ある場合はすべて削除されます。特定の位置の1要素だけを削除したい場合は必ず『delete_at』を使用してください。

『compact』は配列処理の結果に生じた不要な『nil』をまとめて除去する際に便利です。重複要素の削除には『uniq』を、末尾・先頭の操作には『push / pop / shift / unshift』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。