[英]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中的键”根本不清楚,您也没有定义什么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}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.