Rubyで配列から複数の値を削除する方法が分からなかったので調べました。
元となる配列base_listと削除したい文字が入っている配列delete_listは以下です。
base_list = [1, 2, 2, 3, 'hoge', 'fuga', 'piyo'] # 元の配列
# => [1, 2, 2, 3, "hoge", "fuga", "piyo"]
delete_list = [2, 'fuga'] # 削除したい文字の配列
# => [2, "fuga"]
-(マイナス) 指定した配列の要素を取り除いた新しい配列を返す
「-
」を使って、元の配列 - 削除したい文字
とすることで、指定文字が削除された新しい配列が作成されます。
new_list = base_list - delete_list
# => [1, 3, "hoge", "piyo"]
元の配列には変化はありません。
base_list
# => [1, 2, 3, "hoge", "fuga", "piyo"]
difference 指定した配列の要素を取り除いた新しい配列を返す
difference
メソッドでも同じようなことができます。
base_list = [1, 2, 2, 3, 'hoge', 'fuga', 'piyo'] # 元の配列
# => [1, 2, 2, 3, "hoge", "fuga", "piyo"]
delete_list = [2, 'fuga'] # 削除したい文字の配列
# => [2, "fuga"]
new_list = base_list.difference(delete_list)
# => [1, 3, "hoge", "piyo"]
delete 指定した文字を自身から取り除く
指定した1文字だけをすべて削除したい場合はdelete()も使えます。
base_list = [1, 2, 2, 3, 'hoge', 'fuga', 'piyo'] # 元の配列
# => [1, 2, 2, 3, "hoge", "fuga", "piyo"]
base_list.delete(2) # 2を削除
base_list # 元の配列
# => [1, 3, "hoge", "fuga", "piyo"]
参考
instance method Array#-
instance method Array#difference
instance method Array#delete