Ruby混合数组到嵌套哈希

时间:2012-05-22 15:38:57

标签: ruby-on-rails ruby hash multidimensional-array hashmap

我有一个Ruby数组,其元素在字符串和哈希之间交替。例如 -

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

我想从中创建一个嵌套的哈希结构。所以,

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

有没有人/现在这样做的好方法?谢谢。

4 个答案:

答案 0 :(得分:5)

只需使用

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

它将一次切片2并转换为哈希值。

答案 1 :(得分:2)

我不认为数组上有一个方法可以直接执行此操作。以下代码有效且易于阅读。

hsh = {}

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

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

答案 2 :(得分:1)

猜测你想要什么,因为“哈希#1中的键”根本不清楚,你也没有定义hashvalue应该是什么:< / p>

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

答案 3 :(得分:1)

让我们猜测,使用facet只是为了好玩:

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