如何使用group_by筛选包含多个唯一state值的district_code
实现代码
你可以在group_by的基础上结合transform_values和select链式调用完成筛选,完整写法如下:
roads = [['1004', 'VIC'], ['1004', 'BRI'], ['1011', 'VIC'], ['1010', 'ACT'], ['1000', 'ACT'], ['1019', 'VIC'], ['1004', 'VIC']] # Ruby 2.7+ 支持numbered parameter的写法 result = roads.group_by { |ro| ro[0] } .transform_values { |groups| groups.map { _2 }.uniq } .select { |_, states| states.size > 1 } # 兼容所有Ruby版本的写法 result = roads.group_by { |ro| ro[0] } .transform_values { |groups| groups.map { |ro| ro[1] }.uniq } .select { |district_code, states| states.size > 1 } puts result # 输出:{"1004"=>["VIC", "BRI"]}
步骤说明
group_by { |ro| ro[0] }:按district_code(数组第一个元素)分组,得到你示例中展示的分组结果。transform_values:对每个分组的值做转换:提取每个条目中的state(数组第二个元素),再用uniq去重,得到每个district_code对应的唯一state数组。select:筛选出唯一state数组长度大于1的条目,即关联了超过1个唯一state的district_code。
内容的提问来源于stack exchange,提问作者rpg
相关产品推荐
相关产品推荐

