什么是转换和计算数组的有效方法?

时间:2012-01-31 21:49:32

标签: ruby-on-rails ruby arrays

我有一个我想要计算和转换的对象数组。例如:

[#<User id:1, count:0>, #<User id:2, count:0>, #<User id:2, count:0>, #<User id:3, count:0>, #<User id:1, count:0>, #<User id:1, count:0>]

会变成:

[#<User id:1, count:3>, #<User id:2, count:2>, #<User id:3, count:1>]

转变让我感到困惑,因为“地图”直接通过,但这将是递归的。

2 个答案:

答案 0 :(得分:2)

[user1, user2, user2, user3, user1, user1].group_by(&:id).map do |id, users|
  users.first.count = users.size
  users.first
end

答案 1 :(得分:0)

[user1, user2, user2, user3, user1, user1] \
  .group_by(&lambda{|x| x}) \
  .map{ |k, v| k.count = v.count; k }