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

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

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

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

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

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


フリーランス案件を探すならこのエージェント!

運営会社 レバテック株式会社 株式会社Branding Engineer 株式会社Hajimari
対応エリア 東京・神奈川・埼玉・千葉
大阪・兵庫・京都・愛知・福岡
東京・神奈川・埼玉・千葉
大阪・兵庫・京都・奈良・和歌山・滋賀
東京・神奈川・埼玉・千葉
茨城・大阪・兵庫・福岡
案件数 約28,000件 約3,300件 約4,200件
平均単価 68.2万円 72.2万円
最高月収 145万円 200万円 176万円
特徴高単価な案件が多い
福利厚生サービスが受けられる
・首都圏の案件が中心
給与保証制度で安定した収入を得られる
・税務処理のサポートあり
・マージン率は実質20%
週2/週3の案件が多い
在宅/リモート案件が多い
・スタートアップ企業やベンチャー企業の案件が多い
紹介企業例 ・株式会社Gunosy
・株式会社バンダイナムコホールディングス
・株式会社ユーザベース
・Sansan株式会社
・株式会社一休
・株式会社FiNC Technologies など
・クックパッド株式会社
・株式会社カオナビ
・株式会社Kaizen Platform など
説明記事
公式サイト


転職を考えているならこのエージェント!

運営会社 レバテック株式会社 株式会社Branding Engineer 株式会社リブセンス
対応エリア 東京・神奈川・埼玉・千葉
大阪・兵庫・京都・愛知・福岡
東京・神奈川・埼玉・千葉
大阪・兵庫・京都・奈良・和歌山・滋賀
東京・神奈川・埼玉・千葉
茨城・大阪・兵庫・福岡
案件数 約13,000件 約800件
※非公開求人が多い

※ドラフト制のため、対象外
年齢層 20代:◎
30代:〇
40代:〇
20代:〇
30代:〇
40代:△
20代:〇
30代:〇
40代:〇
特徴エンジニア・デザイナーを専門としている
・カウンセリングに時間をかける
年収アップ率60%の実績
IT/Web/ゲーム業界専門の転職エージェント
・業界経験者がキャリアコンサルタントを務める
・丁寧なカウンセリングで入社後の離職率1%以下を実現
ドラフト制による採用を叶える特殊なサービス
スキル・経験重視で評価してもらえる
・他エンジニアの入札結果を見ることで
自分の市場価値が分かる
紹介企業例 ・サイボウズ株式会社
・株式会社サイバーエージェント
・Chatwork株式会社 など
・DMM.com
・Money Forward
・SmartHR など
・メルカリ
・ZOZOテクノロジーズ
・freee など
説明記事
公式サイト


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”」のようなことはできません)。

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

最後に

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

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

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

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

おすすめ記事

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

プログラミングイメージ

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

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