2012-10-16 52 views
0

我有一個Ruby 2D數組,其中每個數組都有一個來自SQL查詢的行以及它在子數組中的列。在ruby二維數組中獲取唯一值和它們的計數

@mastertest = connection.execute("select code_ver from mastertest") 

可能包含這樣的事情:

@mastertest = [{"abc"} , {"abc"}, {"pqr"}, {"xyz"}, {"pqr"}, {"pqr"}] 

現在,我想形成另一個二維數組,這將使我只是其中有code_ver與他們的計唯一值的行。

事情是這樣的:

@result = [{"abc", 2} , {"xyz", 1} , {"pqr", 3}] 
+3

這些都不是有效的Ruby對象。 – sawa

+0

這個問題很混亂......請你解釋一下好嗎? –

回答

3
@result = @mastertest.inject(Hash.new(0)) { |hash,element| 
    hash[element] +=1 
    hash 
} 
+0

非常感謝!作品完美無缺 –

2

正如澤說,你的數據是無效的Ruby對象。我假設你的意思是:

@mastertest = ["abc" , "abc", "pqr", "xyz", "pqr", "pqr"] 
@result = @mastertest.inject({}) do |a, e| 
    a[e] ||= 0 
    a[e] += 1 
    a 
end.to_a 
#=> [["xyz", 1], ["abc", 2], ["pqr", 3]] 
3

我覺得each_with_object是更好的辦法:

["abc" , "abc", "pqr", "xyz", "pqr", "pqr"].each_with_object({}) do |e, o| 
    o[e] ||= 0 
    o[e] += 1 
end.to_a 
#=> [["xyz", 1], ["abc", 2], ["pqr", 3]] 
+0

爲什麼會''each_with_object'更好的方式? – oldergod

+0

它更自然,更不容易犯錯誤,代碼更少。 http://www.themomorohoax.com/2009/01/03/rails-each-with-object-vs-inject – Van

+0

你告訴我,由於某種原因,你甚至沒有使用,因爲你返回數組在循環的結尾,而你不需要? – oldergod

相關問題