[[“a”,1]]的未定义方法`< =':数组(NoMethodError)

时间:2015-11-10 04:42:23

标签: ruby

我的程序打算检查一个字符串是否有两个彼此接近的感兴趣的字符,如下所示:

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,并将它与右边的另一个整数进行比较,对吧?

我知道有不同的方法可以解决这个问题,但我只想知道上面的代码是怎么回事。

任何见解?

谢谢!

1 个答案:

答案 0 :(得分:3)

each_with_index会生成[value, index]对。 select将返回其中一些对;所以a_positionb_position都是成对的数组。在数组之间,-将返回不在a_position中的b_position元素;所以你没有一个整数,你有一个数组(更具体地,你的错误告诉你[["a", 1]])。 [["a", 1]] <= 3显然是无稽之谈。

我想你想要这个:

a_position = arr.index("a")
b_position = arr.index("b")