2012-03-29 63 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 }