simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

Rubyで配列の削除

Rubyで配列の削除には「delete」「delete_at」「delete_if」メソッドが存在する。

・deleteメソッド

array = (1..10).to_a

p array

array.delete(3)

p array
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 4, 5, 6, 7, 8, 9, 10]

deleteメソッドは引数で与えた要素を探しだして削除を行う。すべての要素に対して操作を行うので一つだけ削除などは出来ないことに注意。

array = [1,2,2,3,3]

p array

array.delete(3)

p array
[1, 2, 2, 3, 3]
[1, 2, 2]

arrayの要素3が全てが削除されている。 


delete_atメソッド

delete_atメソッドは引数で与えられた位置の要素を削除する。

array = (0..9).to_a

p array

array.delete_at(4)

p array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 5, 6, 7, 8, 9]

先ほどのdeleteでは指定した要素を全削除だったのだが、find_indexメソッドとdelete_atメソッドを組み合わせることで、同じ要素の中の1だけを削除なんてことができるようになったりする。

array = [1,2,2,3,3]

p array

array.delete_at(array.find_index(3))

p array
[1, 2, 2, 3, 3]
[1, 2, 2, 3]

find_indexの戻り値が最初に見つけた要素の位置を返すので、それを引数にdelete_atを呼び出せば1だけ削除が可能となる。


delete_ifメソッド

delete_ifメソッドはブロック文の中に削除する条件の記述を行い。その返り値が真を返す要素を削除する。

array = (1..10).to_a

p array

array.delete_if{|n| n.even? }

p array
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 3, 5, 7, 9]

even?メソッドを用いて偶数かどうかの判定を行い。偶数の場合は要素を削除するという操作を行なっている。ちなみに、odd?メソッドを使用すれば奇数の要素を削除することができる。

array = (1..10).to_a

p array

array.delete_if{|n| n.odd? }

p array
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 4, 6, 8, 10]