訪問值
使用 []
和 []=
方法讀取和寫入雜湊的各個值:
my_hash = { length: 4, width: 5 }
my_hash[:length] #=> => 4
my_hash[:height] = 9
my_hash #=> {:length => 4, :width => 5, :height => 9 }
預設情況下,訪問尚未新增到雜湊的鍵返回 nil
,這意味著嘗試查詢鍵的值始終是安全的:
my_hash = {}
my_hash[:age] # => nil
雜湊還可以包含字串中的鍵。如果你嘗試正常訪問它們,它將只返回 nil
,而不是通過其字串鍵訪問它們:
my_hash = { "name" => "user" }
my_hash[:name] # => nil
my_hash["name"] # => user
對於期望或需要存在鍵的情況,雜湊具有 fetch
方法,當訪問不存在的鍵時會引發異常:
my_hash = {}
my_hash.fetch(:age) #=> KeyError: key not found: :age
fetch
接受一個預設值作為其第二個引數,如果之前未設定該鍵,則返回該引數:
my_hash = {}
my_hash.fetch(:age, 45) #=> => 45
fetch
也可以接受一個塊,如果以前沒有設定該鍵,則返回該塊:
my_hash = {}
my_hash.fetch(:age) { 21 } #=> 21
my_hash.fetch(:age) do |k|
puts "Could not find #{k}"
end
#=> Could not find age
雜湊還支援 store
方法作為 []=
的別名:
my_hash = {}
my_hash.store(:age, 45)
my_hash #=> { :age => 45 }
你還可以使用 values
方法獲取雜湊的所有值:
my_hash = { length: 4, width: 5 }
my_hash.values #=> [4, 5]
注意:這僅適用於 Ruby 2.3+ #dig
對於巢狀的 Hash
s 非常方便。通過在每一步呼叫 dig 來提取由 idx 物件序列指定的巢狀值,如果任何中間步驟為 nil,則返回 nil。
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) # => 1
h.dig(:foo, :zot, :xyz) # => nil
g = { foo: [10, 11, 12] }
g.dig(:foo, 1) # => 11