どうも、ちょげ(@chogetarou)です。
ハッシュ(Hash)のnilの値を削除する方法を紹介します。
方法

ハッシュ(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? }
コメント