迭代哈希Ruby

迭代哈希Ruby,ruby,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,

我这里有一个半工作半破坏的代码

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”

而不是数字

我还想知道怎么可能不返回任何内容而不返回最后一行

=> {"H"=>1, "E"=>1, "L"=>2, "O"=>1}
谢谢你的帮助

换行

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

它很有效,因为在Ruby中

在您的代码版本中,
print…
put
显示任何内容之前被评估(并打印到控制台),这就是为什么您会出现这种看似奇怪的行为。

更改行

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

它很有效,因为在Ruby中

在您的代码版本中,
print…
put
显示任何内容之前被评估(并打印到控制台),这就是为什么您会出现这种看似奇怪的行为。

更改行

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

它很有效,因为在Ruby中

在您的代码版本中,
print…
put
显示任何内容之前被评估(并打印到控制台),这就是为什么您会出现这种看似奇怪的行为。

更改行

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

它很有效,因为在Ruby中


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

它“返回”一些内容,因为
每个
都返回您正在迭代的内容。如果在
irb
中运行此命令,则默认情况下会打印最后一条语句的结果。此外,考虑一下像<代码>”{{KE}}:“{x'*Valu}}”< /Cord>,以便于阅读,避免打印<代码>倍> <代码>的返回值,这与您所看到的问题完全相同。您是否打算编写<代码> hash=Stru.Upase.Survivs/<代码>?如果没有,那么您可能正在向类
字符串添加一个方法,在这种情况下,您应该显示包含在
def my_method…end
中的代码以及包含在
类字符串…end
中的代码。事实上,我添加到了字符串类中。我认为回答我的问题不会有什么问题,事实并非如此也许,但至少应该说,您所编写的是为
String
类编写的方法的一部分。许多读者会做出这样的假设,但我向您保证,其他许多Ruby新手尤其不会这样做。无论如何,我想不出有什么理由可以省略这几个字。下次我会记住的。无论如何,再次感谢大家在这方面花费的时间。它“返回”了一些东西,因为
每个
都返回您正在迭代的内容。如果在
irb
中运行此命令,则默认情况下会打印最后一条语句的结果。此外,考虑一下像<代码>”{{KE}}:“{x'*Valu}}”< /Cord>,以便于阅读,避免打印<代码>倍> <代码>的返回值,这与您所看到的问题完全相同。您是否打算编写<代码> hash=Stru.Upase.Survivs/<代码>?如果没有,那么您可能正在向类
字符串添加一个方法,在这种情况下,您应该显示包含在
def my_method…end
中的代码以及包含在
类字符串…end
中的代码。事实上,我添加到了字符串类中。我认为回答我的问题不会有什么问题,事实并非如此也许,但至少应该说,您所编写的是为
String
类编写的方法的一部分。许多读者会做出这样的假设,但我向您保证,其他许多Ruby新手尤其不会这样做。无论如何,我想不出有什么理由可以省略这几个字。下次我会记住的。无论如何,再次感谢大家在这方面花费的时间。它“返回”了一些东西,因为
每个
都返回您正在迭代的内容。如果在
irb
中运行此命令,则默认情况下会打印最后一条语句的结果。此外,考虑一下像<代码>”{{KE}}:“{x'*Valu}}”< /Cord>,以便于阅读,避免打印<代码>倍> <代码>的返回值,这与您所看到的问题完全相同。您是否打算编写<代码> hash=Stru.Upase.Survivs/<代码>?如果没有,那么您可能正在向类
字符串添加一个方法,在这种情况下,您应该显示包含在
def my_method…end
中的代码以及包含在
类字符串…end
中的代码。事实上,我添加到了字符串类中。我认为回答我的问题不会有什么问题,事实并非如此也许,但至少应该说,您所编写的是为
String
类编写的方法的一部分。许多读者会做出这样的假设,但我向您保证,其他许多Ruby新手尤其不会这样做。无论如何,我想不出有什么理由可以省略这几个字。下次我会记住的。无论如何,再次感谢大家在这方面花费的时间。它“返回”了一些东西,因为
每个
都返回您正在迭代的内容。如果在
irb
中运行此命令,则默认情况下会打印最后一条语句的结果。此外,考虑一下像<代码>”{{KE}}:“{x'*Valu}}”< /Cord>,以便于阅读,避免打印<代码>倍> <代码>的返回值,这与您所看到的问题完全相同。您是否打算编写<代码> hash=Stru.Upase.Survivs/<代码>?如果没有,那么您可能正在向类
字符串添加一个方法,在这种情况下,您应该显示包含在
def my_method…end
中的代码以及包含在
类字符串…end
中的代码。事实上,我添加到了字符串类中。我认为回答我的问题不会有什么问题,事实并非如此也许,但至少,你应该说你所拥有的