ruby - 将数组值映射到 ruby 哈希键
问题描述
这里我有示例代码,将数组映射到哈希并将哈希附加到数组但预期的输出缺少数组值
data = {"a"=>5,"b"=>["e","f"]}
data1 = [44,55]
s = []
data1.each_with_index do |i,index|
a = data1[index]
data["b"] = i
s << data
end
p s
输出:
[{"a"=>5, "b"=>55}, {"a"=>5, "b"=>55}]
预期输出:
[{"a"=>5, "b"=>44}, {"a"=>5, "b"=>55}]
解决方案
您的主要问题是您将相同的对象引用放入每个数组元素中。把它想象成把两把钥匙放在两个不同地方的同一个储物柜里。如果你改变储物柜里的东西,两把钥匙都会打开它,他们都会看到同样的东西。因此,当您更改 的值时'b'
,您会为两个数组元素中的对象更改它,因为它们是同一个对象。
解决方案是通过创建对象的副本data
、更改其'b'
值并将结果放入结果数组来开始您的块。
我也将您更改each_with_index
为map
,因为map
最好在您转换数组中的值时使用。此外,您不需要在块中提供索引;您只是在遍历数组元素,而不关心在使用它时正在使用哪个元素。
data = {"a"=>5,"b"=>["e","f"]}
data1 = [44,55]
s = []
data1.map do |num|
the_copy = data.clone
the_copy['b'] = num
s << the_copy
end
p s
推荐阅读
- python - 如何合并边界框以检测一组点?
- android - 安卓动态壁纸触摸事件
- deep-learning - 反向传播算法不适用于感知器
- python - 在 vscode Jupyter Notebook 中使用 head 运行 Selenium
- python - 从数据框中提取行作为列表
- java - 我的代码没有错误消息,但我知道为什么它在控制台中没有显示任何内容,我是 Java 新手,请帮助我
- caddy - 球童:无法识别的指令:uri
- javascript - 点击函数调用在 Playcode 但不是 SquareSpace
- swift - 从自定义框架显示 UIAlertViewController
- notepad++ - 如何防止 Notepad++ 更改 Autohotkey 注释的字体样式