要素毎に判定を行い該当する要素を配列から取り除く(delete_if)

Array クラスの delete_if メソッドを使用すると、配列に格納されている各要素に対してブロック内で処理を実行し結果が true の要素を除外します。ここでは Ruby で要素毎に判定を行い該当する要素を取り除く方法について解説します。

(Last modified: )

要素毎に判定を行い該当する要素を取り除く

Array クラスで用意されている delete_if メソッドを使うと配列に格納されている各要素に対してブロック内で処理を実行し結果が true の要素を取り除きます。

Arrayオブジェクト.delete_if {|x| ... }

delete_if メソッドはその後に記述されたブロック内で要素毎に実行する文を記述します。各要素の値はブロック内の |x| の箇所に書かれた変数で参照できます。

具体的には次のように記述します。

ary = [1, 2, 3, 5, 4, 3]
ary.delete_if {|x| x % 2 == 0}

この場合、各要素の値を取り出して 2 で割り切れた場合取り除かれます。結果として元の配列から該当の要素を取り除いた配列となります。

[1, 3, 5, 4, 3]

またまったく同じ動作をするメソッドとして reject メソッドも用意されています。

Arrayオブジェクト.reject! {|x| ... }

使い方は delete_if メソッドと同じです。

サンプルコード

実際に試してみます。

# encoding: UTF-8

ary = [1, 2, 3, 5, 4, 3]
p ary

ary.delete_if {|x| x % 2 == 0}
p ary

実行結果は次のようになります。

要素毎に判定を行い該当する要素を取り除く

-- --

Ruby で要素毎に判定を行い該当する要素を取り除く方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。