迭代哈希Ruby

时间:2014-11-28 16:07:01

标签: ruby

我这里有半个半工作的代码。

hash = upcase.scan(/\w/).each_with_object(Hash.new(0)) do |char, hash|
  hash[char] += 1
end 
hash.each do |key, value|
  puts "#{key}: #{value.times{print"x"}}" 
end

返回类似这样的内容。

xH: 1
xE: 1
xxL: 2
xO: 1

=> {"H"=>1, "E"=>1, "L"=>2, "O"=>1}

我的问题如何在

之后将代码打印出“x”
#{key}:

而不是数字。

而且我也想知道如何才能返回任何内容而不是最后一行?

=> {"H"=>1, "E"=>1, "L"=>2, "O"=>1}

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

更改行

puts "#{key}: #{value.times{print"x"}}" 

puts "#{key}: #{'x' * value}" 

它有效,因为在Ruby String * int will repeat the String int times

在您的代码版本中,print ...puts显示任何内容之前进行了评估(并打印到控制台),这就是为什么您有这种看似奇怪的行为。