【发布时间】:2021-02-03 07:11:01
【问题描述】:
我试图拒绝数组中的特定哈希。由于事物的嵌套,我感到困惑
我有一个看起来像这样的哈希
hash = {
"key1":
[
{
"name": "foo",
"id": 1
},
{
"name": "foo",
"id": 2
},
{
"name": "bar",
"id": 3
}
],
"key2":
[
{
"name": "foo",
"id": 1
},
{
"name": "foo",
"id": 2
},
{
"name": "bar",
"id": 3
}
]
}
我需要遍历每个值并修改数组以拒绝任何具有 hash[:name] == "bar" 的哈希值,并且仍然保持其他所有内容不变。
我在努力
hash = hash.each_value do |value|
value.reject {|v| v[:name] == "bar"}
end
=> {:key1=>[{:name=>"foo", :id=>1}, {:name=>"foo", :id=>2}, {:name=>"bar", :id=>3}],
:key2=>[{:name=>"foo", :id=>1}, {:name=>"foo", :id=>2}, {:name=>"bar", :id=>3}]}
我可以用这样的方式删除它们:
hash.values.flatten.reject {|v| v[:name] == "bar"}
=> [{:name=>"foo", :id=>1}, {:name=>"foo", :id=>2}, {:name=>"foo", :id=>1}, {:name=>"foo", :id=>2}]
但我需要初始哈希保持不变
我希望得到这个:
hash = {
"key1":
[
{
"name": "foo",
"id": 1
},
{
"name": "foo",
"id": 2
}
],
"key2":
[
{
"name": "foo",
"id": 1
},
{
"name": "foo",
"id": 2
}
]
}
我也试过这条路线:
hash.reject do |key, value|
value.each do |r|
r[:name] == "bar"
end
end
=> {}
非常感谢任何帮助 - 我很想解释我的逻辑哪里不好
我知道我对事物的迭代不正确,所有的嵌套让我有点困惑
【问题讨论】:
-
我想我只需要从
hash.values中删除额外的数组包装器并对其进行迭代
标签: ruby