使用索引数组在字符串中查找字符

时间:2018-02-20 17:46:16

标签: arrays ruby string

我有一个要解析的字符串。我设法使用一种方法来查找子字符串的索引。这是代码:

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成为一个整数数组,它就可以了。我想知道为什么我可以使用基本数组在索引处获得一个字符,但不是从该方法派生的数组。

1 个答案:

答案 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