【Ruby】配列内の要素を削除するメソッドをまとめてご紹介!

  • 2020年4月6日
  • 2021年10月15日
  • Ruby

今回は、Ruby初心者の方々に向けて、配列の要素を削除する際に知っておくと便利なメソッドをご紹介させていただきます。

Webアプリケーションを開発する中で、配列は必ずと言ってよいほど使用することとなるオブジェクトになります。

そのため、今回ご紹介するメソッドを知っているだけで、コードをかなり簡素化することができ、開発スピードもグンと向上すること間違いなしです。

なお、配列の便利なメソッドを用途別にもまとめてありますので、こちらもぜひ合わせてご覧になってくださいね。

>> 配列を初期化する方法
>> 配列に要素を追加する方法
>> 配列の要素を検索する方法
>> 配列のサイズを調べる方法


レバテックフリーランス … 業界最大級の案件数業界トップクラスの高単価報酬を誇る最大手のサービスです。実績豊富なコーディネーターが丁寧な対応をしてくれるため、案件の無理な提案はありません。フリーランスで生きていくためにはまず登録しておきましょう。
MidWorks … フリーランス賠償責任保障生命保険の折半など、フリーランスでありながらも正社員並みの保障を受けられるのが特徴です。また、経験豊富なキャリアコンサルタントによる手厚いサポートも受けられるため、安定したフリーランス生活を送りたい方には特におすすめのサービスです。
ポテパンフリーランス … IT業界・技術に詳しいコンサルタントが担当してくれるため、こちらの要望をきちんと理解した上で案件を紹介してくれます。また、案件情報のみならず、フリーランスのイロハについても教えてくれるため、フリーランスとして初めて活動される方には特におすすめのサービスです。

レバテックキャリア … ITエンジニアが利用したい転職エージェントNo.1にも選ばれており、年収600万円以上のハイクラス求人を5,000件以上も保有しています。エンジニアが転職を考えた時にまず初めに登録しておくべきサービスです。
Tech Stars Agent … Tech Stars Agentでは、担当エージェントが全員エンジニア出身のため、スキルやキャリアを見据えたきめ細かな転職支援が受けられます。運営元の株式会社Branding Engineerは、独立支援サービス「MidWorks」も展開しているため、独立を視野に入れたサポートも受けられます
転職ドラフト … 年収UP率93.8%/平均年収UP額126万円と圧倒的な年収UP率を誇るイベント型のエンジニア向け 転職サービスです。毎月1回開催され、厳選された優良IT/Web系企業約150社からダイレクトスカウトを受け取ることができます。年収アップを目指す方は登録必須です。

Rubyの配列とは

配列とは、任意のオブジェクトを複数まとめた上で、それらを同じように取り扱える/それらに対して同じ処理を加えられるようにしたオブジェクトです。

詳細については以下の記事にて詳しくご説明していますので、「まだ配列のイメージがイマイチ掴めていない…」という方はまずはこちらの記事からご覧くださいね。

おすすめ記事

今回は、Rubyの配列(Array)の基本的な使い方についてご紹介させていただきます。 Webアプリケーションを開発する中で、配列は必ずと言ってよいほど使用することとなるオブジェクトになります。 そのため、今回ご紹介する、基本[…]

プログラミングイメージ

【Ruby】配列の要素を削除する際に便利なメソッド一覧

今回ご紹介しようと思っているメソッドは、以下の10種類になります。

  • 1. delete
  • 2. delete_at
  • 3. delete_if
  • 4. shift
  • 5. pop
  • 6. slice!
  • 7. compact
  • 8. uniq
  • 9. clear
  • 10. -(演算子)

それぞれの主な用途や使い方、そして具体例を交えながらご説明させていただきますね。

【Ruby】配列の要素を削除する際に便利なメソッドその1 delete / delete!メソッド

まずご紹介するのは、「delete」メソッドです。

deleteメソッドを使用することで、配列の中から指定した値を削除することができます。

具体例を見ながらその使い方を見ていきましょう。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP"]
irb(main):002:0> array.delete("Ruby")
=> "Ruby"
irb(main):003:0> array
=> ["Rails", "Javascript", "Go", "PHP"]
irb(main):004:0> array.delete("Ruby on Rails")
=> nil

上記の通り、元々の配列から “Ruby” という文字列を削除することができていますよね。

ここで注目すべきは、その戻り値になります。

deleteメソッドでは、削除に成功した場合には「削除後の配列」ではなく、「削除に成功した要素そのもの」を返します。また、要素が見つからない等の理由で削除に失敗した場合には “nil” を返します

この点はdeleteメソッドを使う上でよく間違えてしまうポイントですので注意しておいてくださいね。

また、deleteメソッドのもう一つの特徴としては、引数として指定した要素が複数存在している場合には「その全てを削除する」ということが挙げられます。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Ruby"]
irb(main):002:0> array.delete("Ruby")
=> "Ruby"
irb(main):003:0> array
=> ["Rails", "Javascript", "Go", "PHP"]

こちらも忘れやすいポイントではありますのでご注意くださいね。

【Ruby】配列の要素を削除する際に便利なメソッドその2 delete_atメソッド

続いてご紹介するのは、「delete_at」メソッドです。

delete_atメソッドでは、削除した要素の「添え字」を指定することでその要素を削除することができます。

添え字」というのは、配列内の要素それぞれに振られている数字のことでしたよね。

「あれ、なんだっけ?」と思ってしまった方は、ぜひこちらの記事もご確認くださいね。

おすすめ記事

今回は、Rubyの配列(Array)の基本的な使い方についてご紹介させていただきます。 Webアプリケーションを開発する中で、配列は必ずと言ってよいほど使用することとなるオブジェクトになります。 そのため、今回ご紹介する、基本[…]

プログラミングイメージ

それでは、具体例を見ながらその使い方を確認していきましょう。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP"]
irb(main):002:0> array.delete_at(2)
=> "Javascript"
irb(main):003:0> array
=> ["Ruby", "Rails", "Go", "PHP"]
irb(main):004:0> array.delete_at(10)
=> nil

このように、削除したい要素の添え字を指定することで、配列からその要素を削除することができます

このdelete_atメソッドもdeleteメソッドと同様に、削除に成功した場合には「削除に成功した要素そのもの」を返し、削除に失敗した場合には “nil” を返しますので、ご注意くださいね。

【Ruby】配列の要素を削除する際に便利なメソッドその3 delete_ifメソッド

続いてご紹介するのは、「delete_if」メソッドです。

delete_ifメソッドは、その名から推測できるかもしれませんが、配列内の要素のうち、条件式に合致したものを削除することができます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:1* array.delete_if do |name|
irb(main):003:1*   name.size == 4
irb(main):004:0> end
=> ["Rails", "Javascript", "Go", "PHP"]

上記の例では、配列の中から「文字数が4」のものを削除するという処理を実行しています。

注意すべきは、その戻り値になります。

これまでのdeleteメソッドおよびdelete_atメソッドとは異なり、delete_ifメソッドでは「削除後の配列」を返しますので、この点はご注意くださいね(※削除するものがなかった場合は元々の配列を返します)。

【Ruby】配列の要素を削除する際に便利なメソッドその4 shiftメソッド

続いてご紹介するのは、「shift」メソッドです。

shiftメソッドを使うと、配列内の要素を先頭から削除していくことができます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array.shift()
=> "Ruby"
irb(main):003:0> array
=> ["Rails", "Javascript", "Go", "PHP", "Java"]

また、引数を指定することで、先頭から指定した数の要素を削除することができます。

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array.shift(3)
=> ["Ruby", "Rails", "Javascript"]
irb(main):003:0> array
=> ["Go", "PHP", "Java"]

shiftメソッドの場合には、「削除後の配列」ではなく、「削除に成功した要素そのもの」を返しますのでご注意くださいね(※空の配列(“[]”)に対してshiftメソッドを実行すると、そのまま空の配列が返ってきます)。

【Ruby】配列の要素を削除する際に便利なメソッドその5 popメソッド

続いてご紹介するのは、「pop」メソッドです。

popメソッドでは、shiftメソッドとは逆に、配列の後ろから要素を削除することができます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array.pop()
=> "Java"
irb(main):003:0> array
=> ["Ruby", "Rails", "Javascript", "Go", "PHP"]

また、このpopメソッドでも、引数を指定することで、末尾から指定した数の要素を削除することができます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array.pop(3)
=> ["Go", "PHP", "Java"]
irb(main):003:0> array
=> ["Ruby", "Rails", "Javascript"]

popメソッドもshiftメソッドと同様に、「削除に成功した要素そのもの」を返しますのでご注意くださいね(※空の配列(“[]”)に対してpopメソッドを実行すると、そのまま空の配列が返ってきます)。

【Ruby】配列の要素を削除する際に便利なメソッドその6 slice!メソッド

続いてご紹介するのは、「slice!」メソッドです。

slice!メソッドを使うと、指定した範囲の要素を削除することができます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array.slice!(0,2)
=> ["Ruby", "Rails"]
irb(main):003:0> array
=> ["Javascript", "Go", "PHP", "Java"]

上記の通り、slice!メソッドでは引数を二つ指定する必要があり、第1引数には削除したい要素の開始位置を、第2引数にはその開始位置からいくつ削除するかを指定する必要があります。

slice!メソッドも、「削除に成功した要素そのもの」を返しますのでご注意くださいね。

【Ruby】配列の要素を削除する際に便利なメソッドその7 compactメソッド

続いてご紹介するのは、「compact」メソッドです。

compactメソッドでは、特に引数を指定する必要はなく、配列内からnilを削除するために使用します。

irb(main):001:0> array = ["Ruby", "Rails", nil, "Javascript", "Go", "PHP", "Java", nil]
irb(main):002:0> array.compact
=> ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):003:0> array
=> ["Ruby", "Rails", nil, "Javascript", "Go", "PHP", "Java", nil]

nilが入ってしまう恐れのある配列に対してはcompactメソッドを使用することで思わぬエラーを回避することができるようになります。

ただし1点注意すべきことがあります。

compactメソッドの戻り値は「削除後の配列」なのですが、元々の配列は元々のまま(nilが含まれたままの状態)になっているのです。

これを「元の配列は変更しない」という意味で「非破壊的」と呼びますので、こちらも頭の片隅に置いておいてくださいね(※逆にこれまでのメソッドのように元々の配列も変更してしまうものは「破壊的」と呼びます)。

【Ruby】配列の要素を削除する際に便利なメソッドその8 uniqメソッド

続いてご紹介するのは、「uniq」メソッドです。

uniqメソッドは、その名の通り、配列内で重複した要素を一つにまとめてくれます

irb(main):001:0> array = ["Ruby", "Rails", "Ruby", "Javascript", "Go", "PHP", "Java", "Java"]
irb(main):002:0> array.uniq
=> ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]

このuniqメソッドもcompactメソッドと同様に「非破壊的」メソッドであり、元々の配列は元々のまま(重複した要素が含まれたままの状態)になっていますのでご注意くださいね。

【Ruby】配列の要素を削除する際に便利なメソッドその9 clearメソッド

続いてご紹介するのは、「clear」メソッドです。

clearメソッドは、その名の通り、配列内の要素を全て一気に削除することができます

irb(main):001:0> array = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array.clear
=> []

このclearメソッドは元々の配列も変更してしまう(空にしてしまう)ので、「破壊的」メソッドと言えますね。

【Ruby】配列の要素を削除する際に便利なメソッドその10 -(演算子)メソッド

最後にご紹介するのは、「-(演算子)」メソッドです。

これまでのメソッドとは少し毛色が違っているのですが、四則演算で使用する「-」も配列に対して使用することができます

irb(main):001:0> array1 = ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]
irb(main):002:0> array2 = ["Ruby", "Rails", "Java"]
irb(main):003:0> array1 - array2
=> ["Javascript", "Go", "PHP"]
irb(main):004:0> array1
=> ["Ruby", "Rails", "Javascript", "Go", "PHP", "Java"]

上記の通り、同じ配列同士であれば、共通した要素を削除することができます(※「array1 – “Ruby”」のようなことはできません)。

ただし、上記の出力結果をご覧いただいた通り、この「-(演算子)」メソッドも「非破壊的」で元々の配列までは変更しませんのでご注意くださいね。

お仕事の途中ですが、少し一休みして、転職独立について考えてみませんか🙌?

現役エンジニアが選ぶおすすめの転職エージェント11選【成功談・失敗談もあります】

レバテックフリーランスの評判ってどう?【現役エンジニアが徹底解説します】

MidWorks(ミッドワークス)の評判ってどう?【現役エンジニアが徹底解説します】

日々の業務に追われて自分を見失わないよう、
定期的にキャリアを振り返るようにしておきましょう🤲

最後に

さて、ここまで、Rubyで配列の要素を削除する際に知っておくと便利なメソッドについてご説明してきましたがいかがでしたか?

今回ご紹介したものを頭に入れておけば、普段の開発でも特段困ることはないでしょう

注意点としては、その「戻り値」と「破壊的か非破壊的か」ということです。これらをしっかりと把握していないと思わぬバグを生んでしまうことになりますので、くれぐれも気をつけてくださいね。

なお、配列を扱う際に知っておくべきその他の便利なメソッドについては以下の記事にてご説明していますので、こちらもぜひご確認くださいね。

おすすめ記事

今回は、Ruby初心者の方々に向けて、配列(Array)を扱う際に最低限知っておくべきメソッドをご紹介させていただきます。 Webアプリケーションを開発する中で、配列は必ずと言ってよいほど使用することとなるオブジェクトになります。 […]

プログラミングイメージ

このブログを通じて少しでも「傍(はた)を楽(らく)にする」ことができていれば嬉しく思います。

最後まで読んで頂きありがとうございました。