簡體   English   中英

Ruby混合數組到嵌套哈希

[英]Ruby mixed array to nested hash

我有一個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並轉換為哈希。

我認為數組上沒有方法可以直接執行此操作。 以下代碼有效,而且很容易閱讀。

hsh = {}

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

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

猜測您想要什么,因為“ hash#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

讓我們猜測一下,僅出於樂趣而使用刻面:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM