2015-05-22 50 views
0

每當我在哈希運行條件檢查,看是否有鍵沒有任何價值,它會創建一個關鍵防止哈希條件檢查器創建密鑰

x = Hash.new {|h,k| h[k] = []} 
puts x 
>>>>{} 


if x[0] == [] 
    puts "Ok" 
end 

>>>>Ok 

puts x 
>>>> {0=>[]} 

如何避免這種情況?

+0

你想要輸出什麼? – rick

回答

1

你可以使用has_key?方法:

x = Hash.new { |h,k| h[k] = [] } 

x.has_key?(0) 
#=> false 
x 
#=> {} 

說,你可以你的條件更改爲:

puts "Ok" if x.has_key?(0) && x[0] == [] 

這意味着你將只檢查值x[0]如果你alreday知道鍵存在。

0
x = Hash.new {|h,k| h[k] = []} 

如果你像這樣創建散列,它會每次都設置一個新的默認對象。

例如:

x = Hash.new {|h,k| h[k] = 0} 

x[0] 
=> 0 
x 
=> {0=>0} 

x = Hash.new {|h,k| h[k] = "a" } 
=> {} 

x[0] 
=> "a" 
x 
=> {0=>"a"} 

所以你應該知道自己想要什麼的默認哈希值做。