开发者社区> 问答> 正文

用字符串数组制作哈希值

尝试将数组转换为散列,其中键是单词,值是单词出现在数组中的次数(例如“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
但是代码根本不起作用。

展开
收起
小六码奴 2019-04-09 17:24:21 1995 0
1 条回答
写回答
取消 提交回答
  • 虽然您可以按照上面的注释来修复代码,但我还是想提供以下选择:

    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的答案是更惯用的,但我只想展示如何修复代码而不是重写代码。

    2019-07-17 23:33:02
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载