我有一个要解析的字符串。我设法使用一种方法来查找子字符串的索引。这是代码:
indexArray = []
myString.to_enum(:scan, /(\n)/i).map do
indexArray.push [$`.size] #`
end
#indexArray = [0,2,3,4,5,6]
myString[indexArray[1]] # => no implicit conversion of Array into Integer (TypeError)
我尝试使用to_i
,但似乎破坏了逻辑。任何见解都表示赞赏。如果我取消注释第二行到最后一行,使indexArray
成为一个整数数组,它就可以了。我想知道为什么我可以使用基本数组在索引处获得一个字符,但不是从该方法派生的数组。
答案 0 :(得分:2)
首先,您应该使用snake_case
代替camelCase
来获取方法名称和变量。以下代码也相应更改。
这一行:
index_array.push [$`.size]
将创建一个包含单个元素$`.size
的新数组,并将其推送到index_array
。
你最终会得到一个这样的嵌套数组:(你可以通过p index_array
检查数组)
index_array #=> [[0], [2], [3], [4], [5], [6]]
只需按$`.size
(不使用数组)即可轻松解决此问题:
index_array.push $`.size
此外,您的代码可以简化:
index_array = my_string.to_enum(:scan, /\n/).map { $`.size }
map
已经返回一个包含给定块返回的元素的数组。\n
周围的捕获组,因此不需要。i
标志是多余的,因为只有一个\n
。