首页 > 解决方案 > 如何根据Ruby中的条件从哈希数组中删除哈希

问题描述

我有一个哈希数组:

a = [{'id'=> '1', 'subject'=> 'this is subject 1', 'orig_id'=> 123, 'parent_id'=> 123}, 
     {'id'=> '2', 'subject'=> 'this is subject 2', 'orig_id'=> 456, 'parent_id'=> 123},
     {'id'=> '3', 'subject'=> 'this is subject 3', 'orig_id'=> 789, 'parent_id'=> 980}]

我想根据条件过滤它,如果parent_id一个对象的 等于另一个对象的orig_id或 ,parent_id则保留第一个哈希并删除另一个。

从上述场景中,第二个哈希将被删除,输出将是:

a = [{'id'=> '1', 'subject'=> 'this is subject 1', 'orig_id'=> 123, 'parent_id'=> 123}, 
     {'id'=> '3', 'subject'=> 'this is subject 3', 'orig_id'=> 789, 'parent_id'=> 980}]

标签: ruby

解决方案


分组parent_id 检测正确的,否则返回所有分组的哈希值。

a.
  group_by { |h| h["parent_id"] }.
  flat_map do |id, hs|
    hs.find { |h| h["orig_id"] == id } || hs
  end

推荐阅读