首页 > 解决方案 > 将数组值映射到 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}]

标签: ruby

解决方案


您的主要问题是您将相同的对象引用放入每个数组元素中。把它想象成把两把钥匙放在两个不同地方的同一个储物柜里。如果你改变储物柜里的东西,两把钥匙都会打开它,他们都会看到同样的东西。因此,当您更改 的值时'b',您会为两个数组元素中的对象更改它,因为它们是同一个对象。

解决方案是通过创建对象的副本data、更改其'b'值并将结果放入结果数组来开始您的块。

我也将您更改each_with_indexmap,因为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

推荐阅读