我有一個Ruby數組,其元素在字符串和散列之間交替。例如 -紅寶石混合數組嵌套散列
["1234", Hash#1, "5678", Hash#2]
我想從中創建一個嵌套的散列結構。所以,
hash["1234"]["key in hash#1"] = value
hash["5678"]["key in hash#2"] = value
有沒有人有/現在這樣做的好方法?謝謝。
我有一個Ruby數組,其元素在字符串和散列之間交替。例如 -紅寶石混合數組嵌套散列
["1234", Hash#1, "5678", Hash#2]
我想從中創建一個嵌套的散列結構。所以,
hash["1234"]["key in hash#1"] = value
hash["5678"]["key in hash#2"] = value
有沒有人有/現在這樣做的好方法?謝謝。
只需使用
hsh = Hash[*arr] #suppose arr is the array you have
它將在一個時間段2和轉化成散列。
你需要'哈希[* arr]',但是對於另外一個極好的點+1! – Phrogz
@Progrog yes你是對的:) – texasbruce
我不認爲有一個方法直接做到這一點。下面的代碼工作,很容易閱讀。
hsh = {}
ary.each_slice(2) do |a, b|
hsh[a] = b
end
# Now `hsh` is as you want it to be
簡單:'hsh = Hash [ary.each_slice(2).to_a]'(請參閱我的回答)。 – Phrogz
在你想要的猜測,因爲「散列#1鍵」是不明確的,也不要爲有你定義了什麼hash
或value
應該是:
value = 42
h1 = {a:1}
h2 = {b:2}
a = ["1234",h1,"5678",h2]
a.each_slice(2).each{ |str,h| h[str] = value }
p h1, #=> {:a=>1, "1234"=>42}
h2 #=> {:b=>2, "5678"=>42}
或者,也許你的意思是這樣的:
h1 = {a:1}
h2 = {b:2}
a = ["1234",h1,"5678",h2]
hash = Hash[ a.each_slice(2).to_a ]
p hash #=> {"1234"=>{:a=>1}, "5678"=>{:b=>2}}
p hash["1234"][:a] #=> 1
讓我們猜測,使用方面只是爲了好玩:
require 'facets'
xs = ["1234", {:a => 1, :b => 2}, "5678", {:c => 3}]
xs.each_slice(2).mash.to_h
#=> {"1234"=>{:a=>1, :b=>2}, "5678"=>{:c=>3}}
這並不完全清楚你想要什麼。你是否想從數組中獲取第二個元素(應該是散列),並使用數組中的前一個項目創建一個使用基於原始散列中已有鍵的散列值的鍵(第二項陣列)? – coreyward
哈希可能有多個鍵/值,他們會去哪裏?嘗試在示例中使用有效的Ruby。如果你說:1)我有這個數組(真正的數組),2)我想要這個結果,3)這是我迄今爲止嘗試過的。 – tokland
我低估了你的問題,因爲目前還不清楚。如果你編輯你的問題來澄清什麼樣的真實數據,以及你想要發生什麼樣的數據,我會很高興地反駁我的投票。 – Phrogz