【问题标题】:Finding a character in a string using an index array使用索引数组在字符串中查找字符
【发布时间】:2018-02-20 17:46:15
【问题描述】:

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

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

【问题讨论】:

  • indexArray.push [$`.size]另一个数组 推到 indexArray 上,所以你最终会得到类似 [[0],[2],[3],[4],[5],[6]] 的东西。你可能想要indexArray.push $`.size
  • 添加一个示例将有助于解决这个问题,因为它可以让我们看到您想要实现的目标。
  • 现在不在我的机器上,但谢谢@Stefan!这很可能是解决方案
  • 我确认这是解决方案。谢谢@Stefan
  • @Stefan 你能从你的评论中回答一下,这样这个问题就可以结束了吗?

标签: arrays ruby string


【解决方案1】:

首先,您应该使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    相关资源
    最近更新 更多