【问题标题】:Given an array, returns a hash给定一个数组,返回一个哈希
【发布时间】:2012-10-20 07:17:37
【问题描述】:

编写一个方法,给定一个数组,返回一个哈希,其键是数组中的单词,其值是每个单词出现的次数。

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       

【问题讨论】:

  • 这和正则表达式有什么关系?您需要什么帮助?
  • 你可以建议一个正则表达式的方法!!
  • 如何创建如上所示的哈希

标签: ruby


【解决方案1】:
hash = arr.inject({}) do |hash, element| 
  element.downcase!
  hash[element] ||= 0
  hash[element] += 1
  hash
end

【讨论】:

    【解决方案2】:
    arr.inject­(Hash.new(­0)){|h,k| k.dow­ncase!; h[k] += 1; h}
    

    【讨论】:

    • 可以简化为 { |h,k| h[k.downcase] += 1; h } 进行注入吗?
    【解决方案3】:
    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}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多