Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找并替换哈希数组中的元素-Ruby_Ruby - Fatal编程技术网

查找并替换哈希数组中的元素-Ruby

查找并替换哈希数组中的元素-Ruby,ruby,Ruby,我有一个如下所示的散列数组 status_arr = [{id: 5, status: false}, {id: 7, status: false}, {id: 3, status: false}, {id: 9, status: false} ] 我想用status更新hash:true,如果它有ID5,7 update_ids = [5, 9] 我正在尝试以下内容,不知道如何继续 status_arr

我有一个如下所示的散列数组

status_arr = [{id: 5, status: false}, 
              {id: 7, status: false}, 
              {id: 3, status: false},
              {id: 9, status: false} ]
我想用status更新hash:true,如果它有ID5,7

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} ]
您可以只使用散列而不是Set

或阵列,但对于大型阵列,它会有一些性能问题

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}]

你实际上非常接近,你可以改变这个状态。选择{124; arr{124; update}id。包括?arr[:id]arr[:status]=true}到status{u arr。选择{arr}update | id.include?arr[:id]}。每个{arr[:status]=true}或status}arr。每个{arr[:status]=update id.include}你都可以这样做。状态| arr。如果更新| id,请选择{| arr | arr[:status]=true。包括?arr[:id]}状态| arr.map{| h | h.mergestatus:[5,9]。包括?h[:id]}
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}]