2012-01-31 59 views
0

我有一个我想要计数和变换的对象数组。例如:什么是转换和计数数组的有效方式?

[#<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>] 

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

+1

是输入总是计数0?如果不是,你想要所有这些的总和吗? – 2012-02-01 01:53:02

+0

输入计数可能不是零..我不需要它们的总和,所以提供的答案应该没问题。感谢您要求澄清。 – Inc1982 2012-02-01 05:56:30

回答

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

不错。但是每一个都比地图更有意义,因为它只是在转变。 – pguardiario 2012-02-01 00:28:49

+0

@pguardiario它返回三元素数组OP请求 – 2012-02-01 00:31:18

+0

嗯,他要求对数组进行计数和变换,而不是返回一个新数组。 – pguardiario 2012-02-01 00:37:35

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

就像一个参考,在Ruby 1.9.2 +中,你不需要继续的''''字符。 1.8.7仍然需要它们。 – 2012-01-31 22:07:11

相关问题