簡體   English   中英

無法讓 Ruby 方法通過 Anagram 方法的規范

[英]Can't get Ruby method to pass spec for Anagram method

我試圖讓它通過規范來驗證一個參數是否是另一個單詞的字謎,但它只是沒有發生。

  • 我可以將字符串(從一個刺字開始)放入一個數組中,無論是一個詞還是多個詞,
  • 然后它遍歷每個單詞的數組。
  • 使用 If 語句比較排序對象是否等於排序參數。
  • 應用了 .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

這是查看兩個單詞w1w2是否互為字謎的另一種方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM