Ruby中按哈希键统计数组内各用户对应的职位数量
Ruby 统计用户关联职位数量实现
输入数据
data = [{:user=>1399, :job=>10270}, {:user=>2614, :job=>10270}, {:user=>3112, :job=>10270}, {:user=>2614, :job=>10271}, {:user=>1455, :job=>10271}]
规则说明
- 统计时不区分职位ID,只计算每个用户ID对应的职位条目总数
- 最终结果需要以数组形式返回
- 统计逻辑:用户每在数组中出现1次,就代表关联1个职位,重复出现则计数累加
实现代码
直接用Ruby内置枚举方法即可实现,无额外依赖:
# 遍历数组做计数,默认计数值为0,每遇到同一个user_id就加1,最后转成数组 count_result = data.each_with_object(Hash.new(0)) do |entry, counter| counter[entry[:user]] += 1 end.to_a
运行结果
返回的数组内容如下:
[[1399, 1], [2614, 2], [3112, 1], [1455, 1]]
如果需要打印出题面展示的键值对格式,追加一段遍历输出的代码即可:
count_result.each do |uid, job_num| note = job_num == 2 ? " # because #{uid} has 2 two jobs" : "" puts "#{uid} => #{job_num}#{note}" end
打印效果和预期完全匹配:
1399 => 1 2614 => 2 # because 2614 has 2 two jobs 3112 => 1 1455 => 1
内容的提问来源于stack exchange,提问作者Mohammad Yusuf
相关产品推荐
相关产品推荐

