Search

検索したいワードを入力してください

Rubyで配列や要素を削除するための4つのメソッドまとめ

初回公開日:2019年01月23日

更新日:2019年02月19日

記載されている内容は2019年01月23日時点のものです。現在の情報と異なる可能性がありますので、ご了承ください。

また、記事に記載されている情報は自己責任でご活用いただき、本記事の内容に関する事項については、専門家等に相談するようにしてください。

Rubyで配列を作る場合、その要素の削除方法も知る必要があります。しかし、どのメソッドかわからない方もいるのではないでしょうか。この記事ではその際に利用できる4つのメソッドに焦点を当てています。Rubyのdeleteメソッドを理解したい方はぜひご覧ください。

配列の削除はdeleteメソッドを使う

プログラミング言語「Ruby」を利用する上で、配列の概念は切っても切り離せません。Rubyの学習を開始し、配列を作ってはみたものの、間違った値を入力してしまった、あるいは不要な要素を取り除きたいということはないでしょうか。

deleteメソッドを使用することで、配列から要素を取り除くことができます。

配列を削除する場合にはdeleteメソッドを始めとして、4つの代表的なメソッドがありますので、これから説明していきます。

Rubyのその他の配列操作に関する記事はこちら
Rubyの配列から要素を検索する方法
Rubyの配列の要素数を数える方法
Rubyの配列を結合する方法
Rubyの配列を並び替える(ソート)方法
Rubyの配列を初期化する方法
Rubyで配列要素を追加する方法

Rubyの配列要素削除の4つのメソッド:delete/delete_at/shift/pop

Rubyの配列の要素を削除するには、deleteメソッド、delete_atメソッド、shiftメソッド、popメソッドの主に4つの方法があります。

どのメソッドも要素を削除するというゴールは同じですが、それぞれ、対象となる要素、削除方法が異なりますので、状況に応じて使い分けていきましょう。

deleteメソッドを使ったRubyの配列要素削除方法

Rubyで配列の要素を取り除く際、最もシンプルでわかりやすいメソッドはdeleteメソッドです。

削除したい要素名を直接指定することができるため、削除する対象が明確である場合は、その要素以外を誤って削除してしまうことのないように、このメソッドを使用しましょう。以下が使用例です。

weekday = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
weekday.delete('Monday')
p weekday
#→["Sunday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]が表示

deleteメソッドとは

deleteメソッドは、array.delete(x)で処理されます。「array」には配列名が入り、xはarrayに含まれる要素の数値もしくは文字列が入ります。

上述の例では、配列weekdayに対してdeleteメソッドが使用されています。この場合、xには"Monday"が入力されているためweekdayからMondayの要素が取り除かれています。

この際、MをNとしてしまいweekday.delete(”Nonday”)としてしまうとエラーの表示なしに配列にMondayが残ったままになってしまいます。入力時には必ずスペルミスの内容に注意しましょう。

また、a = [1 , 3, 7, 9]のように、integer型が要素になっている場合であっても、a.delete(7)とすることで、配列から7を取り除くことができます。

delete_atメソッドを使ったRubyの配列要素削除方法

先程はRubyのdeleteメソッドというシンプルな削除方法を説明しました。しかし、上記のweekday配列で、"水曜日"を削除したいけれども、そのスペルに自信がないという場合はどうすれば良いでしょうか。

もちろん、配列の中身を確認し、スペルを確認した後に削除するという方法はあります。しかし、その要素が何番目にあるかさえわかっていれば、Rubyのdelete_atメソッドを使うことで、配列の中身を確認せずとも要素を削除することができます。

実際にやってみましょう。

weekday = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
weekday.delete_at(3)
p weekday
#→["Sunday", "Monday", "Tuesday", "Thursday", "Friday", "Saturday"]が表示

delete_atメソッドとは

delete_atメソッドはarray.delete_at(n)という形で使われます。配列に対するメソッドですので、最初の要素を0とします。

つまり、n+1番目の要素に対してメソッドが削除されます(今回は4番目の'Wednesday')。また、配列の要素の取り出しには[ ]の記号を使いますが、delete_atメソッドではdeleteメソッド同様()を使用しますので、ご注意ください。

さらに、このメソッドの便利な点は後ろから数えた要素に対しても適用できる点です。配列の中に要素が多数入っている場合、後半の要素は前から数えると大変面倒です。しかし、-記号を利用することでその処理も可能になります。

配列weekdayの例では、weekday.delete_at(-2)とすることで後ろから2番目の'Friday'が取り除かれます。後ろから1番目の指定は0ではなく、-1であることに気をつけてください。

shiftメソッドを使ったRubyの配列要素削除方法

ここまで、Rubyの配列の要素を直接指定して削除する場合や、要素が何番目にあるかを利用して削除する方法を説明してきました。

実際の運用場面では、最初の要素もしくは最後の要素を削除したいという場面が多々あります。もちろんその時にRubyのarray.delete_at(0)も使うことできますが、shiftを使えばより簡単に最初の要素を削除することができます。

weekday = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
weekday.shift
p weekday
#→["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]が表示

shiftメソッドとは

shiftメソッドはarray.shiftとすることで使用できます。上述した2つのメソッドとは異なり、数値ないし文字列の入力が必要ないため、要素が存在する場所の数え間違いや要素名スペルミスといったリスクを回避することができます。

今回は配列weekdayに対して、"Sunday"を削除したいと考えたので、shiftメソッドを利用しています。これにより、最初の要素である"Sunday"が削除され、"Monday"が配列weekdayの最初の要素となっていることを確認してください。

popメソッドを使ったRubyの配列要素削除方法

shiftメソッドで最初の要素を削除する方法を説明しましたが、もちろん最後の要素を削除する方法もあります。その際は、rubyのpopメソッドを使うことでshiftメソッドとは反対に最後の要素を削除することができます。

pushメソッドや<<を利用して配列へ直前に入力した値はその配列の最後に位置します。そこで、直前に入れた要素を取り消したい場合にpopメソッドが利用できます。

member = ["John", "Paul", "George", "Ringo"]
member.push("Taro")
p member
#→ ["John", "Paul", "George", "Ringo", "Taro"]が表示
member.pop
p member #→ ["John", "Paul", "George", "Ringo"]が表示

popメソッドとは

popメソッドはarray.popで使用可能です。上記の例では、memberではない"Taro"が直前にpushされ、配列memberに加えられました。

しかし、popメソッドを利用することでその要素が配列memberから削除されています。非常に便利で使用場面も多いメソッドですので、shiftメソッドと合わせて、状況によって使い分けるようにしてください。

早速4つのメソッドを利用してみましょう

以上、Rubyで配列や要素を削除するための4つの主なメソッドを紹介しました。「削除」というと間違ったものを取り消すためのメソッドにも見えますが、もちろんそれだけに限りません。

在庫管理には先入先出や先入後出の概念がありますので、先に入っているものを削除する場合や後に入れたものを削除するといった局面が今後Webアプリの開発場面で出てきます。

今回紹介した4つのメソッド以外にもslice!やuniq!といった便利なメソッドがありますが、まずは今回の4つのメソッドで大半の要素の削除に対応できます。

また、このメソッドをしっかり理解することがその他のメソッドの理解を容易にすることにもつながります。ぜひご自身のPCで実際にRubyを使用して4つのメソッドの効果を試してみてください。

Rubyのその他の配列操作に関する記事はこちら
Rubyの配列から要素を検索する方法
Rubyの配列の要素数を数える方法
Rubyの配列を結合する方法
Rubyの配列を並び替える(ソート)方法
Rubyの配列を初期化する方法
Rubyで配列要素を追加する方法

Related