- Home ›
- Ruby入門 ›
- ハッシュ(Hash)クラス ›
- HERE
キーと値毎に判定を行い該当するキーと値を取り除く
Hashクラスのオブジェクトに含まれるキーと値に対してブロック内で処理を実行し結果が「true」の要素を取り除く方法を確認します。Hashクラスで用意されている「delete_if」メソッドを使います。
Hashオブジェクト.delete_if {|key, value| ... } 戻り値: 自分自身のハッシュオブジェクト
「delete_if」メソッドはその後に記述されたブロック内でキーと値毎に実行する文を記述します。キーと値はブロック内の「|key, value|」の箇所に書かれた変数で参照できます。ブロック内の処理が真(true)となるキーと値を自分自身から削除します。
例えば次のように記述します。
h = {"suzuki" => 87, "itou" => 76, "yamada" => 69} h.delete_if {|key, value| value < 80 }
この場合、ブロック内で値が80よりも小さいキーと値を削除します。
また同じことを行うメソッドとしてHashクラスで「reject!」メソッドが用意されています。
Hashオブジェクト.reject! {|key, value| ... } 戻り値: 自分自身のハッシュオブジェクト。要素を削除しなかった場合はnil
「reject!」メソッドは「delete_if」メソッドと同じ処理を行いますが、削除するキーと値が無かった場合に戻り値として「nil」を返します。
複製されたハッシュオブジェクトからキーと値を取り除く
また自分自身のハッシュオブジェクトからキーと値を取り除くのではなく、複製したハッシュオブジェクトからキーと値を取り除くメソッドも用意されています。Hashクラスで用意されている「reject」メソッドを使います
Hashオブジェクト.reject {|key, value| ... } 戻り値: 複製されキーと値が削除されたハッシュオブジェクト
「reject」メソッドはその後に記述されたブロック内でキーと値毎に実行する文を記述します。キーと値はブロック内の「|key, value|」の箇所に書かれた変数で参照できます。ブロック内の処理が真(true)となるキーと値を複製されたハッシュオブジェクトから削除します。
例えば次のように記述します。
h = {"suzuki" => 87, "itou" => 76, "yamada" => 69} newHash = h.delete_if {|key, value| value < 80 }
サンプルプログラム
では簡単なサンプルで試してみます。
#! ruby -Ks h = {"suzuki" => 87, "itou" => 76, "yamada" => 69} p h print("成績が80よりも小さいキーと値を削除します¥n") h.delete_if {|key, value| value < 80 } p h h = {"suzuki" => 87, "itou" => 76, "yamada" => 69} p h print("成績が80よりも小さいキーと値を削除します¥n") newHash = h.reject {|key, value| value < 80 } p h p newHash
実行結果は次のようになります。
( Written by Tatsuo Ikura )