arrays - 如何创建嵌套数组并转换为嵌套哈希?
问题描述
我正在尝试在 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}}}
我想使用链接键和值将这个哈希数组与基于匹配的另一个数组合并:链接=值,然后能够基于:链接键调用每个子数组元素。
此外,当我每次尝试对哈希做任何事情时,我都会得到“没有将符号隐式转换为整数”不知道我做错了什么以及为什么我得到零。我尝试过扁平化,但没有帮助。
解决方案
y.each do |h|
h.each { |k,v| z[k] = v }
end
应该管用。问题是,您的数组有多个看起来像这样的元素:{ :link=>"1776", :group=>1 }
. 那是一个要素。现在你使用一个each
有两个元素的块k
和v
. 因为只有一个k
将是那个 ( k
= { :link=>"1776", :group=>1 }
) 并且v
将是nil
.
注意:这肯定不是最优雅的解决方案,但它解释了您的错误。您的示例代码没有太大意义。要获得一个好的、优雅的解决方案,请更新您在评论中提出的问题。
推荐阅读
- javascript - D3.js 图表中堆栈栏和线条上的标签
- python - Python 简单的反向传播无法按预期工作
- javascript - 如何将字符串与数组中对象的值进行比较
- javascript - 为什么我看不到它,那是什么二进制代码
- mysql - 在 WHERE IN 子查询中选择
- azure - 如何更改管道变量以在 Azure DevOps 的下一个构建中使用
- python - 我想将 res.partner 地址中的实际城市字段更改为 many2one 字段而不添加新字段
- pine-script - 图表上的计算值
- arrays - Flutter:在包含 Listview 的 Futurebuilder 中显示来自 JSON 的字符串数组
- python - 无法将关键字“id”解析为字段。选项有:完成、task_priority、text、user、user_id