我想要做的是将一堆用户输入的字符串推送到哈希键,并按其输入顺序从 0 向上为每个键分配一个数值。例如;

用户输入:“a s d f b”

结果:

a => 0
b => 1
c => 2
d => 3
f => 4
b => 5

但是我的代码只输出 0 没有增量,请看我下面的代码;
puts "Please enter data:"
text = gets.chomp
words = text.split(" ")
    frequencies = Hash.new(0)

words.each do |k|
    frequencies[k] += 1
end

frequencies.each do |x,y|
    puts x + " " + y.to_s
end

谁能看出上面的代码有什么问题?

最佳答案

Hash 中每个键的默认值都是 0 ,因此通过

frequencies[k] += 1

您正在将每个值(不存在的键)从 0 增加到 1

一个简单的解决方法是使用外部计数器作为值:
counter = 0
words.each do |k|
    frequencies[k] = counter
    counter += 1
end

关于ruby - 在 Ruby 中更新哈希值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31100968/

10-12 23:52