如何將幾個值添加到同一個密鑰?這樣的事情:如何將多個值添加到相同的密鑰
x = {}
x["k1"] = nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
好吧,這不工作像數組。
如何將幾個值添加到同一個密鑰?這樣的事情:如何將多個值添加到相同的密鑰
x = {}
x["k1"] = nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
好吧,這不工作像數組。
您可以如下操作:
對於Array
作爲價值的Hash
的關鍵:
h = Hash.new{|hsh,key| hsh[key] = [] }
h['k1'].push 'a'
h['k1'].push 'b'
p h # >> {"k1"=>["a", "b"]}
對於Hash
作爲值的關鍵一個Hash
:
h = Hash.new{|hsh,key| hsh[key] = {} }
h['k1'].store 'a',1
h['k1'].store 'b',1
p h # >> {"k1"=>{"a"=>1, "b"=>1}}
推薦此代碼,更簡單'h ['k1'] <<'a'<<'b'' –
取決於你在這裏完成的任務。如果你想要一個數組哈希表,這是很容易:
x = {}
x['k1'] = Array.new
x['k1'] << 'a'
x['k1'] << 'b'
,或者如果你想嵌套的哈希值,很簡單也
x = {}
x['k1'] = {}
x['k1']['a'] = 'a'
x['k1']['b'] = 'b'
在哈希值都只是對象。它們可以是數組,其他哈希,或其他任何你可能想要的。
所以,你希望key'k1'的值是一個散列,並且你希望將key/value對添加到那個散列。你可以這樣說:
2.0.0-p195 :111 > x = {}
=> {}
2.0.0-p195 :112 > x['k1'] = { 'a' => '1' }
=> {"a"=>"1"}
2.0.0-p195 :117 > x['k1'].merge!({ 'b' => '2' })
=> {"a"=>"1", "b"=>"2"}
或者,你可以做這樣的:
2.0.0-p195 :119 > x['k1']['c'] = 3
=> 3
2.0.0-p195 :120 > x['k1']
=> {"a"=>"1", "b"=>"2", "c"=>3}
簡短的回答是,你不能:散列關鍵字只有一個定義值。 另外,您正嘗試使用鏟運算符<<
(一種數組方法)來設置值。但是,即使你使用=
,每次你設置鍵爲新值時,舊值丟失:
x = {}
=> {}
x["k1"] = {"a" => "a"}
=> {"a"=>"a"}
x["k1"] = {"b" => "b"}
=> {"b"=>"b"}
正如其他人所指出的那樣,如果你想每個鍵「幾個值」,你應該使用某種集合
x = {}
=> {}
x["k1"] = {"a" => "a", "b" => "b"}
=> {"a"=>"a", "b"=>"b"}
你的問題沒有意義。你真的需要修復它。你的意思是'x [「k1」] = {}'或'= []'?無論如何,以下兩條陳述令人費解。包含一個小例子通常很有幫助,可以顯示給定輸入的輸出結果。如果你這樣做,我們可以幫助你正確地陳述問題(這將對你有教育意義)。 –
如果您將多值鍵值對視爲僅僅是一組鍵 - 值對的鍵,那麼您可以想象如何實現您尋找的典型現代映射類型散列符號。代替'{:key => value1,value2}',請考慮'{:key => [{:subkey_1 => value_1},{:subkey_2 => value_2}]} - 這就是您可以在Ruby中執行的操作,至少。 –