一个愚蠢的问题。我有一段代码,用字母小写和大写字母作为一个来计算字母外观。但它以小写形式返回哈希键。我想问一下如何让哈希键以大写字母的形式返回?还有一种简单的方法可以在每个键之间划一条线吗?谢谢你的前进!
downcase.scan(/\w/).inject(Hash.new(0)) {|h, c| h[c] += 1;h}
答案 0 :(得分:3)
> string = "HellO hElLo"
=> "HellO hElLo"
> string.upcase.scan(/\w/).inject(Hash.new(0)) {|h, c| h[c] += 1;h}
=> {"H"=>2, "E"=>2, "L"=>4, "O"=>2}
答案 1 :(得分:1)
如果您希望字母大写,请先使用upcase
。
使用each_with_object代替inject。 inject
返回块的结果,您必须在最后显式返回哈希。 each_with_object
会自动返回初始哈希值。
string = "Hello hElLo"
hash = string.upcase.scan(/\w/).each_with_object(Hash.new(0)) do |char, hash|
hash[char] += 1
end
puts hash
# => {"H"=>2, "E"=>2, "L"=>4, "O"=>2}
要在每行上输出单个字母及其计数,请迭代哈希:
hash.each do |key, value|
puts "#{key} => #{value}"
end
# H => 2
# E => 2
# L => 4
# O => 2