[英]Can't get Ruby method to pass spec for Anagram method
我試圖讓它通過規范來驗證一個參數是否是另一個單詞的字謎,但它只是沒有發生。
應用了 .join,因為它在 irb 中一次發出一封信,但無論是否有 .join,它仍然沒有發生。
class String define_method(:anagrams) do |check_word| words = self.downcase check_word = check_word.downcase words_array = words.split(" ") words_array.each do |word| if (word.chars.sort) == (check_word.chars.sort) true else false end end end end
任何想法為什么它壞了?
words_array.each do |word|
if (word.chars.sort) == (check_word.chars.sort)
true
else
false
end
end
我假設如果有任何單詞是字謎,你想return true
。 您目前沒有明確返回。
更好的 Ruby 語法是words_array.any? { |word| word.chars.sort == check_word.chars.sort) }
words_array.any? { |word| word.chars.sort == check_word.chars.sort) }
或者
words_array.each do |word|
return true if (word.chars.sort) == (check_word.chars.sort)
end
這是查看兩個單詞w1
和w2
是否互為字謎的另一種方法:
def anagrams?(w1, w2)
w1.size == w2.size && w1.chars.difference(w2.chars).empty?
end
其中Array#difference
是我在此處的答案中定義它的方式。
Array#difference
類似於Array#- 。 以下示例說明了差異:
a = [1,2,3,4,3,2,2,4]
b = [2,3,4,4,4]
a - b #=> [1]
a.difference b #=> [1, 3, 2, 2]
讓我們試試看:
anagrams?("tops", "stop") #=> true
anagrams?("tops", "stopz") #=> false
anagrams?("tops", "stopz") #=> false
anagrams?("tops", "sto") #=> false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.