【问题标题】:How to create a neste array and transform to a nested hash?如何创建嵌套数组并转换为嵌套哈希?
【发布时间】:2019-03-21 15:40:58
【问题描述】:

我正在尝试在 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}}}

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

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

【问题讨论】:

  • 你期望的输出结构是什么?
  • 什么是rt 的本质是什么? iyz 未初始化。给我们一个例子(通过编辑你的问题),也许我们可以提供帮助。指定 r(作为有效的 Ruby 对象)并向我们展示您想要的结果(“输出”),也可以作为有效的 Ruby 对象。
  • 您的代码不起作用。 ryi 未定义。
  • 对不起,这是我第二次发帖,我确实考虑过了。我添加了一些额外的细节。这也让我有机会更多地思考我希望最后的日期结构。

标签: arrays ruby hash nested


【解决方案1】:
y.each do |h|
  h.each { |k,v| z[k] = v }
end

应该可以。问题是,您的数组有多个看起来像这样的元素:{ :link=&gt;"1776", :group=&gt;1 }。那是一个要素。现在,您使用一个带有两个元素 kveach 块。因为只有一个 k 将是那个 (k = { :link=&gt;"1776", :group=&gt;1 }) 和 v 将是 nil

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

【讨论】:

  • 嗨,这可能是一个愚蠢的问题,但我如何逃脱所有的哈希值。目前,这只是将最后一个值保存到“z”。
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2012-07-15
  • 1970-01-01
相关资源
最近更新 更多