我正在尝试计算超过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
答案 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]
你有item_id
计数。