我对Ruby非常陌生,所以请放轻松我。我有这个小功能,不想执行交叉命令。如果我进入irb并输入数组,则设置交叉命令如:third_array = array1& array2,third_array返回公共元素。但是当我通过irb运行这个片段时,它只返回[]。有什么建议吗?
class String
define_method(:antigrams) do |word2|
array1 = []
array2 = []
array1.push(self.split(""))
array2.push(word2.split(""))
third_array = array1 & array2
third_array
end
end
答案 0 :(得分:4)
在看了你的内容之后,我认为你的代码归结为:
class String
def antigrams(word)
self.chars & word.chars
end
end
"flurry".antigrams("flagrant")
# => ["f", "l", "r"]
如果您对split('')
上与chars
实际上相同的单词进行[ [ 'f', 'l', ... ] ]
调用,则效率要低得多。另一个错误是将整个数组推入一个数组,该数组创建了一个&
形式的嵌套数组。由于两个结果数组没有任何共同之处,它们的内部数组不同,+=
操作返回一个空数组。
你的意思是将一个数组连接到另一个数组,例如可以用irb
完成。
每当您对发生的事情感到好奇时,可以使用p
来尝试代码块,或者使用{{1}}来调试方法中的不同点。