我是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/

10-16 15:26