简单的Ruby输入刮刀
我对ruby完全是新手,我想就这个ruby脚本寻求一些帮助 它应该接收一个字符串并找出哪个字符出现得最频繁。它使用一个散列来实现这一点,它将所有字符存储在一个散列中,然后对其进行迭代以找到具有最大值的字符。到目前为止,它似乎没有正常工作,我不知道为什么。就我所知,它可以通过打印语句正确地读取字符。感谢您的帮助 谢谢简单的Ruby输入刮刀,ruby,hash,char,Ruby,Hash,Char,我对ruby完全是新手,我想就这个ruby脚本寻求一些帮助 它应该接收一个字符串并找出哪个字符出现得最频繁。它使用一个散列来实现这一点,它将所有字符存储在一个散列中,然后对其进行迭代以找到具有最大值的字符。到目前为止,它似乎没有正常工作,我不知道为什么。就我所知,它可以通过打印语句正确地读取字符。感谢您的帮助 谢谢 puts "Enter the string you want to search " input = gets.chomp charHash = Hash.new input.
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"
您的代码有两个主要问题: 正如Holger刚才所评论的,您必须使用+=1而不是++ 存储:i,1存储符号:i,你想存储i吗 在工作代码中修复这些结果我在这里使用snake_案例:
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替换为:
最后,您可以使用以下命令将哈希传递到循环中:
我可能错过了一些东西,但似乎
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变量的情况下,文本中至少出现一次的每个字符都满足该条件,并且最终得到最后一个字符。Ruby没有++运算符。使用charHash[i]+=1。另外,下次,请先用谷歌搜索你的错误消息。FACEPALM。我也用谷歌搜索了一下。嘎。谢谢这听起来像是一个无处不在的家庭作业。我们在Ruby中使用snake_案例来表示变量和方法。CamelCase用于课程和模块。感谢您的帮助!这很有帮助
charHash.each { |key,value| goc = key if value > max }
charHash.each do |key,value|
if value > max then
max = value
goc = key
end
end