You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Ruby数组中每个重复type对应的首个对象实例?

解决方案

步骤1:统计各:type的出现频次

先通过group_by按:type对数组元素分组,再用transform_values计算每组的元素数量,得到每个type的出现次数:

type_counts = array.group_by { |item| item[:type] }.transform_values(&:size)
# 结果:{"Staff"=>2, "Guard"=>2, "Office boy"=>1}

步骤2:筛选出重复的:type

从统计结果中过滤出出现次数大于1的type:

duplicate_types = type_counts.select { |_, count| count > 1 }.keys
# 结果:["Staff", "Guard"]

步骤3:获取每个重复:type的首个实例

遍历筛选出的重复type,用find从原数组中取出第一个匹配该type的元素:

result = duplicate_types.map { |type| array.find { |item| item[:type] == type } }

完整代码

array = [
  {:id=>433, :name=>"test 1", :type=>"Staff"},
  {:id=>434, :name=>"test 2", :type=>"Guard"},
  {:id=>435, :name=>"test 3", :type=>"Office boy"},
  {:id=>471, :name=>"test 1", :type=>"Staff"},
  {:id=>473, :name=>"test 2", :type=>"Guard"}
]

type_counts = array.group_by { |i| i[:type] }.transform_values(&:size)
duplicate_types = type_counts.select { |_, cnt| cnt > 1 }.keys
result = duplicate_types.map { |t| array.find { |i| i[:type] == t } }

p result
# 输出:
# [{:id=>433, :name=>"test 1", :type=>"Staff"}, {:id=>434, :name=>"test 2", :type=>"Guard"}]

内容的提问来源于stack exchange,提问作者smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 00:21:26