当前位置: 首页 > 知识库问答 >
问题:

枚举swift字符串时获取“string.index”

卫振
2023-03-14
let greeting = "Hello"
for (intIndex, char) in greeting.enumerated() {
    let currentIndex = greeting.index(greeting.startIndex, offsetBy: intIndex)
    let indexAfterCurrentIndex = greeting.index(after: currentIndex)
    print(greeting[indexAfterCurrentIndex...])
}
let currentIndex = greeting.index(greeting.startIndex, offsetBy: intIndex)
let greeting = "Hello"
for (stringIndex, char) in greeting.enumeratedXXX() {
    let indexAfterCurrentIndex = greeting.index(after: stringIndex)
    print(greeting[indexAfterCurrentIndex...])
}

共有1个答案

李兴安
2023-03-14

对此没有内置功能。您可以将其封装在自定义迭代器中,但您只能将相同类型的计算封装在不同的地方,所以这不是答案:)

但是,您可以改进当前代码的性能:

greeting.index(greeting.startIndex, offsetBy: intIndex)
  • 这将为每个循环迭代计算从startindex到结果索引的索引。
  • 使用索引(_:offsetby:)的索引计算实际上只是另一个循环本身,其中每个索引+1。没有O(1)方法来“计算”索引;它是通过O(n)
  • 中的循环找到的

您可以将复杂性降低到每次迭代2个操作,或者O(2n)。只需将以前计算的索引保存在内存中并+1自己,避免从头开始重新计算。

代码如下:

let greeting = "Hello"
var index = greeting.startIndex
for char in greeting {
    let indexAfterCurrentIndex = greeting.index(after: index)
    print(greeting[indexAfterCurrentIndex...])
    index = indexAfterCurrentIndex
}

仍然不是一个简单和内置的解决方案,但你也可以包装这个更有效的算法,然后离开!

extension String {
    func forEachCharacterWithIndex(iterator: (String.Index, Character) -> Void) {
        var currIndex = self.startIndex
        for char in self {
            iterator(currIndex, char)
            currIndex = self.index(after: currIndex)
        }
    }
}

let greeting = "Hello"
greeting.forEachCharacterWithIndex { (index, char) in
    let indexAfterCurrentIndex = greeting.index(after: index)
    print(greeting[indexAfterCurrentIndex...])
}
 类似资料:
  • 我有一种情况,我试图对一些数据进行二进制解码,数据类型既有数值,也有字符串值和名称。我正在考虑使用枚举,例如: 然而,我也知道: 或者举另一个例子: 是否有一种方法可以将此结构重构为枚举,以便我用整数值构造枚举,但我将枚举“读”为字符串?我很确定答案是否定的。

  • 我定义了以下枚举 现在打印值为 相反,我想打印枚举的值 可以做什么来实现这个功能?

  • 问题内容: 我定义了以下枚举 现在的印刷价值是 相反,我想打印枚举的值 要实现此功能可以做些什么? 问题答案: 您正在打印枚举 对象 。如果只想打印该属性,请使用该属性: 请参阅 对枚举成员及其属性 的 编程访问权限 部分 : 如果您有枚举成员并需要其名称或值: 如果只需要提供自定义字符串表示形式,则可以向枚举添加方法: 演示:

  • 我用一些字符串作为属性的常量创建了一个枚举。每个常数中字符串的数量都不一样,所以我使用了varargs(第一次这样做)。这是我的枚举: 现在我想要能够键入类似的内容:

  • 我有一个typescript中的枚举,它有20个字段。我有一个UI应用程序,用户可以将信息放在一些自由文本中(例如,让我们说用户喜欢的颜色)。我的要求是获取这些颜色信息并致电中层服务。midtier服务将Color定义为Enum,与UI枚举定义保持同步。我需要将用户输入文本转换为枚举(在前端),因为在构建过程中会引发编译问题。我没有找到执行转换的方法(例如,从用户输入字符串到特定枚举元素)。任何指

  • 例如,我如何做类似的事情: 结果示例: