没有将Array隐式转换为Integer(TypeError)

时间:2015-11-09 22:08:07

标签: ruby-on-rails ruby

我创建了一个简单的方法,对字符串中的字符进行排序,如果“b”在“a”之后的三个(或更少)字符内,则返回true,反之亦然。

以下是:

def near_ab(string)
  arr = string.split("")
  a_position = arr.each_with_index.select {|i| arr[i] == "a"}
  b_position = arr.each_with_index.select {|i| arr[i] == "b"}

  if a_position - b_position <= 3      #arr[a] - arr[b] == 3
     return true
 else 
     return false
 end

但是,运行后我收到以下错误:

    `[]': no implicit conversion of Array into Integer (TypeError)

为什么它会给我这个错误,我应该如何解决它?

2 个答案:

答案 0 :(得分:3)

方法each_with_index将第二个参数映射为索引。

请改用:

let button = UIButton(type: .System)
button.setTitle("My Button", forState: .Normal)
button.tintColor = .redColor()

实现目标的更好方法:

arr.each_with_index.select {|element, i| arr[i] == "a"}

(您可以在控制台中将其复制粘贴以进行试用)

答案 1 :(得分:1)

为什么不使用String#index方法? 如前所述,each_with_index需要两个论点。 select为您提供了一个仅使用<=无法比较的数组,这就是错误的原因。

我会使用类似的东西:

def near_ab(string)
     a_position = string.index('a')
     b_position = string.index('b')

    (a_position - b_position).abs <= 3·
end

puts near_ab('abcde')
puts near_ab('acdeb')
puts near_ab('acdefb')

顺便说一句,我在你的问题中没有看到与Rails有任何关系。