Ruby 两个测试都返回false,即使在我看来代码执行得很完美 #编写一个接受字符串的方法。您的方法应该返回 #数组中最常见的字母,以及它的次数 #出现了。 # #难度:中等。 def最常用字母(字符串) 字母=0 字母计数=0 idx1=0 mostfreq_字母=0 最大字母计数=0 而idx1
所以在我看来,程序应该设置一个字母,一旦设置好了,就在字符串中循环寻找相同的字母,一旦有了一个,它就加入到字母计数中,然后判断它是否是最大的字母计数,以及这些值是否被存储到最终的返回值中,一旦while循环结束,这个值应该是正确的。然而,我一直在变假。我哪里出错了?您的代码不会向我返回Ruby 两个测试都返回false,即使在我看来代码执行得很完美 #编写一个接受字符串的方法。您的方法应该返回 #数组中最常见的字母,以及它的次数 #出现了。 # #难度:中等。 def最常用字母(字符串) 字母=0 字母计数=0 idx1=0 mostfreq_字母=0 最大字母计数=0 而idx1,ruby,methods,Ruby,Methods,所以在我看来,程序应该设置一个字母,一旦设置好了,就在字符串中循环寻找相同的字母,一旦有了一个,它就加入到字母计数中,然后判断它是否是最大的字母计数,以及这些值是否被存储到最终的返回值中,一旦while循环结束,这个值应该是正确的。然而,我一直在变假。我哪里出错了?您的代码不会向我返回[false,false];但它确实返回了错误的结果。samgak的提示应该会引导您找到bug 但是,对于更简短、更红润的备选方案: # Write a method that takes in a string.
[false,false]
;但它确实返回了错误的结果。samgak的提示应该会引导您找到bug
但是,对于更简短、更红润的备选方案:
# Write a method that takes in a string. Your method should return the
# most common letter in the array, and a count of how many times it
# appears.
#
# Difficulty: medium.
def most_common_letter(string)
letter = 0
letter_count = 0
idx1 = 0
mostfreq_letter = 0
largest_letter_count = 0
while idx1 < string.length
letter = string[idx1]
idx2 = 0
while idx2 < string.length
if letter == string[idx2]
letter_count += 1
end
idx2 += 1
end
if letter_count > largest_letter_count
largest_letter_count = letter_count
mostfreq_letter = letter
end
idx1 += 1
end
return [mostfreq_letter, largest_letter_count]
end
# These are tests to check that your code is working. After writing
# your solution, they should all print true.
puts(
'most_common_letter("abca") == ["a", 2]: ' +
(most_common_letter('abca') == ['a', 2]).to_s
)
puts(
'most_common_letter("abbab") == ["b", 3]: ' +
(most_common_letter('abbab') == ['b', 3]).to_s
)
创建一个新的
Hash
,每个条目的默认值为0
;迭代字符并计算哈希中每个字符的频率;然后找出哪个散列条目最大。当一个散列被迭代时,它会产生对,就像您想要的函数输出一样,所以这也很好。提示:确保在正确的位置将变量重置为零逻辑中存在缺陷。试着在第二次while循环后调试这个将“letter:{letter},letter#u count:{letter_count}”
放在第二个while循环之后,看看你是否能找到它。但正如其中一个答案所说,def有更好的方法来做到这一点。
def most_common_letter(string)
Hash.new(0).tap { |h|
string.each_char { |c| h[c] += 1 }
}.max_by { |k, v| v }
end