我对ruby来说是全新的,并希望对这个ruby脚本寻求帮助。
它应该接受一个字符串并找出最常出现的字符。它使用散列执行此操作,它将所有字符存储在散列中,然后遍历它以查找具有最大值的字符。截至目前,它似乎没有正常工作,我不知道为什么。就print语句而言,它可以正确地读取字符。任何帮助表示赞赏。
谢谢!
puts "Enter the string you want to search "
input = gets.chomp
charHash = Hash.new
input.split("").each do |i|
if charHash.has_key?(i)
puts "incrementing"
charHash[i]+=1
else
puts"storing"
charHash.store(i, 1)
end
end
goc = ""
max = 0
charHash.each { |key,value| goc = key if value > max }
puts "The character #{goc} occurs the most frequently"
答案 0 :(得分:2)
您的代码存在两个主要问题:
+= 1
代替++
charHash.store(:i, 1)
存储符号:i
,您要存储i
将这些结果修复为正常工作的代码(我在这里使用snake_case):
char_hash = Hash.new
input.split("").each do |i|
if char_hash.has_key?(i)
char_hash[i] += 1
else
char_hash.store(i, 1)
end
end
您可以使用0
作为默认哈希值来省略条件,并且可以将split("").each
替换为each_char
:
char_hash = Hash.new(0)
input.each_char do |i|
char_hash[i] += 1
end
最后,您可以使用Enumerator#with_object
:
char_hash = input.each_char.with_object(Hash.new(0)) { |i, h| h[i] += 1 }
答案 1 :(得分:2)
我可能会遗漏一些东西,但似乎不是
charHash.each { |key,value| goc = key if value > max }
你需要像
这样的东西charHash.each do |key,value|
if value > max then
max = value
goc = key
end
end
请注意max = value
声明。在您当前的实现中(即不更新max变量),文本中出现的每个字符至少一次满足条件,最终得到最后一个字符。