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

広告

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

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」メソッドと同じです。

サンプルプログラム

実際に試してみます。

LibraryArray17.rb

#! ruby -Ks

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

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

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

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

( Written by Tatsuo Ikura )