我试图通过规范验证参数是否是另一个单词的字谜,但它只是没有发生。
应用.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
任何想法为什么会被打破?
答案 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)
这是另一种方法,可以看出两个单词w1
和w2
是否是彼此的字谜:
def anagrams?(w1, w2)
w1.size == w2.size && w1.chars.difference(w2.chars).empty?
end
其中Array#difference
是我在答案here中定义它的方式。
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