字母计数字符串,Ruby

时间:2014-11-28 09:44:00

标签: ruby string

一个愚蠢的问题。我有一段代码,用字母小写和大写字母作为一个来计算字母外观。但它以小写形式返回哈希键。我想问一下如何让哈希键以大写字母的形式返回?还有一种简单的方法可以在每个键之间划一条线吗?谢谢你的前进!

downcase.scan(/\w/).inject(Hash.new(0)) {|h, c| h[c] += 1;h}

2 个答案:

答案 0 :(得分:3)

使用upcase代替downcase

 > 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代替injectinject返回块的结果,您必须在最后显式返回哈希。 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