在哈希数组中查找和替换元素-Ruby

时间:2018-09-06 13:21:38

标签: ruby

我有如下的散列数组

status_arr = [{id: 5, status: false}, 
              {id: 7, status: false}, 
              {id: 3, status: false},
              {id: 9, status: false} ]

我想用状态更新哈希:如果ID为5、7,则为true

update_ids = [5, 9]

我正在尝试以下操作,但不知道要继续

status_arr.select{ |arr| update_ids.include?(arr[:id]) arr[:status] = true}

预期输出:

status_arr = [{id: 5, status: true}, 
              {id: 7, status: false}, 
              {id: 3, status: false},
              {id: 9, status: true} ]

1 个答案:

答案 0 :(得分:1)

require 'set'
update_ids = Set.new([5,3])
status_arr.map{ |s| s[:status] = update_ids.include?(s[:id]); s }
#=> [{:id=>5, :status=>true}, {:id=>7, :status=>false}, {:id=>3, :status=>true}, {:id=>9, :status=>false}]

您只能使用Set代替Hash

update_ids = {5 => true, 3=> true}
status_arr.map{ |s| s[:status] = update_ids.include?(s[:id]); s }
#=> [{:id=>5, :status=>true}, {:id=>7, :status=>false}, {:id=>3, :status=>true}, {:id=>9, :status=>false}]

或数组,但是大型数组会遇到一些性能问题

update_ids = [5,3]
status_arr.map{ |s| s[:status] = update_ids.include?(s[:id]); s }
#=> [{:id=>5, :status=>true}, {:id=>7, :status=>false}, {:id=>3, :status=>true}, {:id=>9, :status=>false}]