如何在Ruby中的哈希中计算非唯一值

时间:2016-08-18 11:52:05

标签: ruby

我正在尝试计算超过1次出现的所有项目[:item_id]。这就是我写的 - 我知道这是错的。希望有人能指出我正确的方向!

subscriptions = [
  {user_id: 1, item_id: 3},
  {user_id: 3, item_id: 2},
  {user_id: 2, item_id: 3},
  {user_id: 6, item_id: 5},
  {user_id: 6, item_id: 2},
  {user_id: 1, item_id: 4}
]

unique_id = subscriptions_list.map {|id| id[:item_id]} > 1 }    
puts unique_id.count

2 个答案:

答案 0 :(得分:1)

这样的事情:

subscriptions.group_by { |h| h[:item_id] }.map { |k,v| [k, v.length] }.to_h

答案 1 :(得分:1)

您可以使用:

subscriptions.each.with_object(Hash.new(0)) do |subscription, counts| 
    counts[subscription[:item_id]] += 1
end
# => {3=>2, 2=>2, 5=>1, 4=>1}
  • each将遍历subscription
  • 的每个元素
  • with_object用于在迭代期间提供任意对象,并将其返回
  • Hash.new(0)创建一个默认值为0的新哈希。访问散列
  • 中不存在的键时返回此值
  • counts[subscription[:item_id]] += 1会将密钥subscription[:item_id]
  • 的哈希值递增1

你有item_id计数。