我是Ruby新手(也是一般的编程新手),我试图将数组转换为哈希,其中键是单词,值是单词在数组中出现的次数(例如“banana”=〉1,“mango”=〉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
但是代码根本不起作用。有人能给我解释一下为什么不起作用,我应该修改什么吗?
谢谢你,谢谢你
5条答案
按热度按时间fv2wmkja1#
要使代码正常工作,您需要修改使用
each_with_object
的方式。Hash.new(0)
是一个哈希函数,当读取一个未知的键时,它返回0,所以你在这里要做的是通过迭代array
并将每个键的计数加1来填充它。我建议阅读更多关于reduce和each_with_object的内容,以了解它们的用法。
Fabio的回答更符合习惯,但我只是想说明如何修复代码,而不是重写代码。
idv4meu82#
使用最新的ruby(
itself
和transform_values
方法),您可以:在哪里
smtd7mpg3#
不知道是不是有效的方式,但它的备用方式
%w[banana pear mango kiwi mango].group_by{|x| x}.map{|key, values| [key, values.length]}.to_h
but5z9lq4#
虽然您可以按照上面的注解来修复代码,但我希望提供以下替代方法:
yqyhoc1h5#
从Ruby 2.7开始就有了tally方法。下面是代码示例:
输出: