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

Ruby数组哈希过滤后插入新数组出现重复数据问题求助

解决Ruby数组中哈希重复引用的问题

嘿,我明白你为啥会得到重复的结果啦!问题出在你只创建了一个hash_data哈希对象,并且在整个循环里反复修改它的属性,然后把同一个对象的引用添加到line_item数组中。数组存储的是对象的引用,而不是拷贝,所以最后数组里的所有元素其实都指向同一个哈希——也就是最后一次循环修改后的那个版本。

修复方案1:每次循环创建新的哈希对象

把hash_data = {}移到循环内部,这样每次迭代都会生成一个全新的哈希,就不会出现引用重复的问题了:

a = [ {"name"=>"hello", "age"=>"12", "sex"=> "M", "city"=>"Chennai"}, {"name"=>"name2", "age"=>"26", "sex"=> "M", "city"=>"Banglore"} ]
line_item = Array.new
a.each do |datas|
  hash_data = {} # 每次循环新建一个独立的哈希
  hash_data[:name] = datas["name"]
  hash_data[:age] = datas["age"]
  line_item << hash_data
end

修复方案2:用map方法更简洁地实现

Ruby里的map方法天生就是用来把一个数组转换成另一个数组的,写法更简洁优雅,也能避免手动管理对象引用的问题:

a = [ {"name"=>"hello", "age"=>"12", "sex"=> "M", "city"=>"Chennai"}, {"name"=>"name2", "age"=>"26", "sex"=> "M", "city"=>"Banglore"} ]
line_item = a.map do |data|
  { name: data["name"], age: data["age"] }
end

验证结果

运行上面任意一段代码,都会得到你期望的结果:

[ {:name=>"hello", :age=>"12"}, {:name=>"name2", :age=>"26"} ]

内容的提问来源于stack exchange,提问作者sakthivel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:46