sak*_*vel 2 ruby arrays loops ruby-on-rails
我有一个数组包含哈希,我想从哈希过滤几个参数并将过滤后的数据插入另一个数组但下面不成功的是我用过的样本数据
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
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果:
[
{:name=>"name2", :age=>"26"},
{:name=>"name2", :age=>"26"}
]
Run Code Online (Sandbox Code Playgroud)
但我期待这样:
[
{:name=>"hello", :age=>"12"},
{:name=>"name2", :age=>"26"}
]
Run Code Online (Sandbox Code Playgroud)
有人请帮忙解决这个问题,提前谢谢
a = [
{"name"=>"hello", "age"=>"12", "sex"=> "M", "city"=>"Chennai"},
{"name"=>"name2", "age"=>"26", "sex"=> "M", "city"=>"Banglore"}
]
a.map{ |e| e.slice("name", "age") }
#=> [{"name"=>"hello", "age"=>"12"}, {"name"=>"name2", "age"=>"26"}]
Run Code Online (Sandbox Code Playgroud)
map:返回Array包含块返回的值slice:返回Hash仅包括指定的键在循环外定义散列意味着您不断再次添加相同的散列对象(同时覆盖其先前的值).相反,在循环中创建一个新的哈希:
line_items = []
a.each do |datas|
hash_data = {}
hash_data[:name] = datas["name"]
hash_data[:age] = datas["age"]
line_items << hash_data
end
Run Code Online (Sandbox Code Playgroud)
代码看起来有点不合时宜.让我们重构一下吧.
我们可以在哈希文字中设置密钥:
line_items = []
a.each do |datas|
hash_data = { name: datas["name"], age: datas["age"] }
line_items << hash_data
end
Run Code Online (Sandbox Code Playgroud)
我们可以摆脱hash_data变量:
line_items = []
a.each do |datas|
line_items << { name: datas["name"], age: datas["age"] }
end
Run Code Online (Sandbox Code Playgroud)
我们可以map用来直接转换数组:
line_items = a.map { |h| { name: h["name"], age: h["age"] } }
#=> [{:name=>"hello", :age=>"12"}, {:name=>"name2", :age=>"26"}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |