我的程序打算检查一个字符串是否有两个彼此接近的感兴趣的字符,如下所示:
def near_ab(string)
arr = string.split("")
a_position = arr.each_with_index.select {|element, i| arr[i] == "a"}
b_position = arr.each_with_index.select {|element, i| arr[i] == "b"}
if a_position - b_position <= 3
return true
else
return false
end
end
除了我收到以下错误外,一切看起来都不错:
`near_ab': undefined method `<=' for [["a", 1]]:Array (NoMethodError)
为什么说&lt; =运算符是未定义的?我调用的函数的结果应该是左边的yield和integer,并将它与右边的另一个整数进行比较,对吧?
我知道有不同的方法可以解决这个问题,但我只想知道上面的代码是怎么回事。
任何见解?
谢谢!
答案 0 :(得分:3)
each_with_index
会生成[value, index]
对。 select
将返回其中一些对;所以a_position
和b_position
都是成对的数组。在数组之间,-
将返回不在a_position
中的b_position
元素;所以你没有一个整数,你有一个数组(更具体地,你的错误告诉你[["a", 1]]
)。 [["a", 1]] <= 3
显然是无稽之谈。
我想你想要这个:
a_position = arr.index("a")
b_position = arr.index("b")