"hello", "ag-6ren">
gpt4 book ai didi

ruby-on-rails - 哈希数组插入另一个数组

转载 作者:数据小太阳 更新时间:2023-10-29 08:14:43 25 4
gpt4 key购买 nike

我有一个包含散列的数组,我想从散列中过滤一些参数并将过滤后的数据插入另一个数组但我没有成功下面是我使用的示例数据

a = Array.new
a = [
{"name"=>"hello", "age"=>"12", "sex"=> "M", "city"=>"Chennai"},
{"name"=>"name2", "age"=>"26", "sex"=> "M", "city"=>"Banglore"}
]
line_item = Array.new
hash_data = {}

a.each do |datas|
hash_data[:name] = datas["name"]
hash_data[:age] = datas["age"]
line_item << hash_data
end

我得到这个结果:

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

但我期待着:

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

有人请帮忙解决这个问题,在此先感谢

最佳答案

在循环外定义散列意味着您会再次添加相同的散列对象(同时覆盖其先前的值)。相反,循环中创建一个新的散列:

line_items = []
a.each do |datas|
hash_data = {}
hash_data[:name] = datas["name"]
hash_data[:age] = datas["age"]
line_items << hash_data
end

代码看起来有点单调。让我们重构它。

我们可以在散列文字中设置键:

line_items = []
a.each do |datas|
hash_data = { name: datas["name"], age: datas["age"] }
line_items << hash_data
end

我们可以去掉 hash_data 变量:

line_items = []
a.each do |datas|
line_items << { name: datas["name"], age: datas["age"] }
end

而且我们可以使用map直接转换数组:

line_items = a.map { |h| { name: h["name"], age: h["age"] } }
#=> [{:name=>"hello", :age=>"12"}, {:name=>"name2", :age=>"26"}]

关于ruby-on-rails - 哈希数组插入另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com