[Ruby]ハッシュ(Hash)のnilの値を削除するには?

Ruby

どうも、ちょげ(@chogetarou)です。

ハッシュ(Hash)のnilの値を削除する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

ハッシュ(Hash)のnilの値を削除する方法は、2つあります。

compactメソッド

1つは、compactメソッドを使う方法です。

h.compact」のように、ハッシュからcompactメソッドを呼び出します。

#hash=対象のハッシュ
result = hash.compact

上記のcompactメソッドは、呼び出したハッシュ(Hash)からnilの値を持つ要素を削除したハッシュを生成します。

もし、新しいハッシュ(Hash)を生成せず、呼び出したハッシュ(Hash)を変更したい場合は、compact!メソッドを使います。

#呼び出したハッシュを変更
hash.compact!

使用例

numbers = { 
    "one" => 1, 
    "いち" => nil,
    "two" => 2,
    "に" => nil,
    "three" => 3,
    "four" => 4,
    "よん" => nil,
    "five" => 5,
}

result = numbers.compact

puts result
出力:
{"one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5}

使用例2

numbers = { 
    "one" => 1, 
    "いち" => nil,
    "two" => 2,
    "に" => nil,
    "three" => 3,
    "four" => 4,
    "よん" => nil,
    "five" => 5,
}

numbers.compact!

puts numbers
出力:
{"one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5}

delete_ifメソッド

もう1つは、delete_ifメソッドを使う方法です。

まず、ハッシュからdelete_ifメソッドを呼び出します。

delete_ifメソッドに引数を2つ持つブロックを渡します。

delete_ifメソッドのブロックで、第2引数がnilの場合に「true」を返す条件式を戻り値にします。

#hash=対象のハッシュ
hash.delete_if { |_, value| value.nil? }

上記のdelete_ifメソッドは、呼び出したハッシュ(Hash)からnilの値を持つ要素を削除します。

使用例

numbers = { 
    "one" => 1, 
    "いち" => nil,
    "two" => 2,
    "に" => nil,
    "three" => 3,
    "four" => 4,
    "よん" => nil,
    "five" => 5,
}

numbers.delete_if { |_, value| value.nil? }

puts numbers
出力:
{"one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5}

まとめ

ハッシュ(Hash)のnilの値を削除する方法は、2つあります。

  • compactメソッドを使う方法
    result = hash.compact
  • delete_ifメソッドを使う方法
    hash.delete_if { |_, value| value.nil? }

コメント

タイトルとURLをコピーしました