You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:03