开发者社区> 问答> 正文

用字符串数组制作哈希值

宋淑婷 2019-04-09 17:24:21 212

尝试将数组转换为散列,其中键是单词,值是单词出现在数组中的次数(例如“banana”=> 1,“芒果“=> 2等)。

我正在尝试使用each_with_object这样做,因为我读它应该适用于从数组构建新的哈希。

array = %w(banana pear mango kiwi mango)

hash1 = array.each_with_object(Hash.new(0)) do |word, count|
hash1[word] = count
count += 1
return hash1
end

puts hash1
但是代码根本不起作用。

分享到
取消 提交回答
全部回答(1)
  • 宋淑婷
    2019-07-17 23:33:02

    虽然您可以按照上面的注释来修复代码,但我还是想提供以下选择:

    array.zip.group_by(&:first).transform_values(&:size)

    => {"banana"=>1, "pear"=>1, "mango"=>2, "kiwi"=>1}


    要使代码正常工作,您需要修复使用方式each_with_object。

    array = %w(banana pear mango kiwi mango)

    hash1 = array.each_with_object(Hash.new(0)) do |word, counts|
    counts[word] += 1
    end

    puts hash1
    Hash.new(0)是读取未知密钥时返回零的哈希。所以你在这里做的是通过迭代array并将每个键的计数增加一来填充它。

    我建议阅读更多关于reduce和each_with_object的内容以了解它们的用法。

    Fabio的答案是更惯用的,但我只想展示如何修复代码而不是重写代码。

    0 0
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章