尝试将数组转换为散列,其中键是单词,值是单词出现在数组中的次数(例如“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
但是代码根本不起作用。
虽然您可以按照上面的注释来修复代码,但我还是想提供以下选择:
array.zip.group_by(&:first).transform_values(&:size)
要使代码正常工作,您需要修复使用方式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的答案是更惯用的,但我只想展示如何修复代码而不是重写代码。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。