我是Ruby的新手(一般来说是编码),我尝试将数组转换成散列,其中键是单词,值是单词在数组中出现的次数(例如,“banana”=>1,“mango”=>2等等)。
我试着对每个带有u的对象都这样做,因为我读到它应该可以从数组中构建新的散列。
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
但代码根本不起作用有人能给我解释一下为什么不行,我该换什么吗?
谢谢您!
最佳答案
要使代码工作,您需要修正使用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和每个带_对象的内容,了解它们的用法。
法比奥的答案更为地道,但我只想展示如何修复代码,而不是重写它。
关于ruby - 从字符串数组中散列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55580566/