无法通过Ruby方法为Anagram方法

时间:2015-09-23 00:24:12

标签: ruby

我试图通过规范验证参数是否是另一个单词的字谜,但它只是没有发生。

  • 我可以将字符串(从一个单词开始)变成一个数组,以及它是一个还是多个单词,
  • 然后在每个单词上遍历数组。
  • 使用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
    

任何想法为什么会被打破?

2 个答案:

答案 0 :(得分:1)

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) }

OR

words_array.each do |word|
  return true if (word.chars.sort) == (check_word.chars.sort)
end

答案 1 :(得分:0)

这是另一种方法,可以看出两个单词w1w2是否是彼此的字谜:

def anagrams?(w1, w2)
  w1.size == w2.size && w1.chars.difference(w2.chars).empty?
end

其中Array#difference是我在答案here中定义它的方式。

Array#differenceArray#-类似。以下示例说明了不同之处:

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