2012-03-29 68 views
1

在Ruby中排序我有一个数组由函数Search.all返回:计数出现次数在数组和on Rails的

=> [#<Search id: 7, name: "ap", presence: true, created_at: "2012-03-16 00:58:42", updated_at: "2012-03-16 00:58:42">, #<Search id: 8, name: "papier", presence: true, created_at: "2012-03-16 01:14:32", updated_at: "2012-03-16 01:14:32">, #<Search id: 9, name: "carton de jus", presence: true, created_at: "2012-03-20 22:28:53", updated_at: "2012-03-20 22:28:53">, #<Search id: 10, name: "carton de jus", presence: true, created_at: "2012-03-20 22:29:01", updated_at: "2012-03-20 22:29:01">, #<Search id: 11, name: "Papier", presence: true, created_at: "2012-03-22 20:43:36", updated_at: "2012-03-22 20:43:36">, #<Search id: 12, name: "Papier", presence: true, created_at: "2012-03-22 20:43:47", updated_at: "2012-03-22 20:43:47">, #<Search id: 13, name: "Salut", presence: false, created_at: "2012-03-24 20:34:49", updated_at: "2012-03-24 20:34:49">, #<Search id: 14, name: "carton", presence: true, created_at: "2012-03-26 19:32:03", updated_at: "2012-03-26 19:32:03">, #<Search id: 15, name: "carton", presence: true, created_at: "2012-03-26 19:32:11", updated_at: "2012-03-26 19:32:11">, #<Search id: 16, name: "carton", presence: true, created_at: "2012-03-26 19:32:15", updated_at: "2012-03-26 19:32:15">, #<Search id: 17, name: "cellulaire", presence: true, created_at: "2012-03-26 19:32:28", updated_at: "2012-03-26 19:32:28">, #<Search id: 18, name: "cellulaire", presence: true, created_at: "2012-03-26 19:32:36", updated_at: "2012-03-26 19:32:36">, #<Search id: 19, name: "montre", presence: false, created_at: "2012-03-29 00:45:26", updated_at: "2012-03-29 00:45:26">, #<Search id: 20, name: "montre", presence: false, created_at: "2012-03-29 00:45:29", updated_at: "2012-03-29 00:45:29">, #<Search id: 21, name: "montres", presence: false, created_at: "2012-03-29 00:45:32", updated_at: "2012-03-29 00:45:32">, #<Search id: 22, name: "montre", presence: false, created_at: "2012-03-29 00:45:35", updated_at: "2012-03-29 00:45:35">] 

我想指望基于“名称”相同的元素的出现次数的数量 。我知道如何找到在数组中出现次数像这样的:['a', 'b', 'a']

favoris.inject(Hash.new(0)) { |h,v| h[v] += 1; h } 

但如何可以使用以前的数组中?

+1

简单。用'h [v.name]'替换'h [v]'(或者你得到名字)。 – Linuxios 2012-03-29 00:56:23

回答

6
favoris.inject(Hash.new(0)) { |h,v| h[v.name] += 1; h } 

:)

+0

它工作,谢谢! – 2012-03-29 01:02:02

+0

我需要等8分钟才能完成。 – 2012-03-29 01:12:58

0

我更喜欢基于each一个解决方案,因为你实际上迭代数组中的每个元素,同时产生副作用。那对于我的理解来说,这不是创建inject的原因。

h = Hash.new(0) 
favoris.each { |el| h[el] += 1 }