我创建了一个简单的方法,对字符串中的字符进行排序,如果“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)
为什么它会给我这个错误,我应该如何解决它?
答案 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有任何关系。