首页 > 解决方案 > 如何创建嵌套数组并转换为嵌套哈希?

问题描述

我正在尝试在 ruby​​ 中创建嵌套哈希。以下是我用来首先创建嵌套数组然后嵌套哈希的代码。

r=[]
y=[]
z={}

r= [["1776"], ["1094"], ["1666", "1077"]]

i=1

r.each do |t|
    t.each do |h|
        y << {:link => h, :group => i} 
    end 
    i = i + 1 
end 

y.each { |k,v| z[k] = v }

但是,当我输入“p z”时,我会不断输出以下输出:

{{:link=>"1776", :group=>1}=>nil, {:link=>"1094", :group=>2}=>nil 
{:link=>"1666", :group=>3}=>nil, {:link=>"1077", :group=>3}=>nil}

我的目标是创建一个类似这样的结构:

{{:link=>"1666" {:group=>3}}, {:link=>"1077" {:group=>3}}}

我想使用链接键和值将这个哈希数组与基于匹配的另一个数组合并:链接=值,然后能够基于:链接键调用每个子数组元素。

此外,当我每次尝试对哈希做任何事情时,我都会得到“没有将符号隐式转换为整数”不知道我做错了什么以及为什么我得到零。我尝试过扁平化,但没有帮助。

标签: arraysrubyhashnested

解决方案


y.each do |h|
  h.each { |k,v| z[k] = v }
end

应该管用。问题是,您的数组有多个看起来像这样的元素:{ :link=>"1776", :group=>1 }. 那是一个要素。现在你使用一个each有两个元素的块kv. 因为只有一个k将是那个 ( k= { :link=>"1776", :group=>1 }) 并且v将是nil.

注意:这肯定不是最优雅的解决方案,但它解释了您的错误。您的示例代码没有太大意义。要获得一个好的、优雅的解决方案,请更新您在评论中提出的问题


推荐阅读