Ruby中将数组值映射到哈希键追加到数组输出异常如何解决
问题原因
Ruby 中的哈希属于引用数据类型,你代码中全程操作的都是内存中同一个data哈希实例:
- 每次循环修改
data["b"]的值时,覆盖的都是同一个对象的属性 s << data只是将这个哈希的内存引用追加到数组,并没有生成新的哈希副本
循环结束后data的b属性已经被更新为最后一次循环的55,数组s里的两个元素指向同一个哈希实例,所以输出两个值完全相同的哈希。
修复方案
每次循环时先复制原哈希生成新的副本,修改副本后再追加到数组即可,修改后的代码如下:
data = {"a"=>5,"b"=>["e","f"]} data1 = [44,55] s = [] data1.each_with_index do |i,index| # 复制生成新的哈希实例,避免修改原对象 current_data = data.dup current_data["b"] = i s << current_data end p s
运行后即可得到预期输出:
[{"a"=>5, "b"=>44}, {"a"=>5, "b"=>55}]
内容的提问来源于stack exchange,提问作者Bharath
相关产品推荐
相关产品推荐

