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]