2012-10-20 24 views
-2

編寫一個給定數組的方法返回一個散列,其中的鍵是數組中的單詞,其值是每個單詞出現的次數。給定一個數組,返回一個散列

arr=["A", "man", "a", "plan", "a", "canal","Panama"] 
# => {'a' => 3, 'man' => 1, 'canal' => 1, 'panama' => 1, 'plan' => 1} 

我該如何做到這一點?這裏是我的代碼:

hash={} 
arr.each do |i| 
    hash.each do |c,v| 
     hash[c]=v+1 
    end 
end  
+1

這是什麼都用正則表達式來呢?你需要什麼幫助? – BoltClock

+0

你可能會建議一個正則表達式的方法! – OneMoreError

+0

看到這篇文章:http://stackoverflow.com/questions/569694/count-duplicate-elements-in-ruby-array – texasbruce

回答

3
hash = arr.inject({}) do |hash, element| 
    element.downcase! 
    hash[element] ||= 0 
    hash[element] += 1 
    hash 
end 
3
arr.inject­(Hash.new(­0)){|h,k| k.dow­ncase!; h[k] += 1; h} 
+1

可以簡化爲'{| h,k | h [k.downcase] + = 1; h}'注射? – Rym

0
arr = ["A", "man", "a", "plan", "a", "canal","Panama"] 
r = {} 
arr.each { |e| e.downcase!; r[e] = arr.count(e) if r[e].nil? } 

輸出

p r 
#==> {"a"=>3, "man"=>1, "plan"=>1, "canal"=>1, "panama"=>1} 
相關問題