2012-05-22 58 views
-1

我有一個Ruby數組,其元素在字符串和散列之間交替。例如 -紅寶石混合數組嵌套散列

["1234", Hash#1, "5678", Hash#2] 

我想從中創建一個嵌套的散列結構。所以,

hash["1234"]["key in hash#1"] = value 
hash["5678"]["key in hash#2"] = value 

有沒有人有/現在這樣做的好方法?謝謝。

+2

這並不完全清楚你想要什麼。你是否想從數組中獲取第二個元素(應該是散列),並使用數組中的前一個項目創建一個使用基於原始散列中已有鍵的散列值的鍵(第二項陣列)? – coreyward

+1

哈希可能有多個鍵/值,他們會去哪裏?嘗試在示例中使用有效的Ruby。如果你說:1)我有這個數組(真正的數組),2)我想要這個結果,3)這是我迄今爲止嘗試過的。 – tokland

+1

我低估了你的問題,因爲目前還不清楚。如果你編輯你的問題來澄清什麼樣的真實數據,以及你想要發生什麼樣的數據,我會很高興地反駁我的投票。 – Phrogz

回答

5

只需使用

hsh = Hash[*arr] #suppose arr is the array you have 

它將在一個時間段2和轉化成散列。

+1

你需要'哈希[* arr]',但是對於另外一個極好的點+1! – Phrogz

+0

@Progrog yes你是對的:) – texasbruce

2

我不認爲有一個方法直接做到這一點。下面的代碼工作,很容易閱讀。

hsh = {} 

ary.each_slice(2) do |a, b| 
    hsh[a] = b 
end 

# Now `hsh` is as you want it to be 
+0

簡單:'hsh = Hash [ary.each_slice(2).to_a]'(請參閱我的回答)。 – Phrogz

1

在你想要的猜測,因爲「散列#1鍵」是不明確的,也不要爲有你定義了什麼hashvalue應該是:

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 
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}} 
+0

已經涵蓋ksol的答案(效率較低的形式)和我的答案(直接)。 – Phrogz

+1

@Progrog:好的,改成facet來展示新的東西。 – tokland

+0

那麼,從另一個答案中抽出來做出最佳答案是沒有問題的。 (我明確地說,你應該在你的答案中加上'Hash []'版本,特別是如果你接受這個答案的話。)以前你的答案只是重複的,但現在它是+ 1able :) – Phrogz