【问题标题】:Enumerate String from specific index in nested loop in Swift在 Swift 的嵌套循环中从特定索引枚举字符串
【发布时间】:2020-01-28 09:12:30
【问题描述】:

使用enumerated()方法从String获取字符

let str = "Hello"

for (i,val) in str.enumerated() {
        print("\(i) -> \(val)")
}

现在尝试在 for 循环中枚举相同的字符串,但从 i 位置如

for (i,val) in str.enumerated() {
        print("\(i) -> \(val)")
        for (j,val2) in str.enumerated() {
            // val2 should be from i postion instead starting from zero
        }
}

如何枚举和设置j的位置应该从i开始?

谢谢

【问题讨论】:

    标签: swift swift4


    【解决方案1】:

    您可以使用dropFirst() 在字符串中以特定位置开始创建视图:

    for (i,val) in str.enumerated() {
        print("i: \(i) -> \(val)")
        for (j, val2) in str.dropFirst(i).enumerated() {
            print("j: \(i+j) -> \(val2)")
        }
    }
    

    如果要获取原始字符串对应的索引,则需要在第二个循环中添加i,否则j将持有dropFirst()创建的视图中的索引

    【讨论】:

      【解决方案2】:

      您可以使用for instr.indices 并在外部循环的基础上启动内部循环。

      let str = "abc"
      
      for i in str.indices {
          for j in str[i...].indices {
              print(str[j])
          }
      }
      

      输出:a b c b c c


      (来自@LeoDabus的建议)

      【讨论】:

      • 这是预期的,因为 enumerated() 方法返回偏移量而不是索引。请注意,每次迭代都会不必要地从 startIndex 偏移索引。顺便说一句,您也应该将 StringProtocol 或集合本身扩展到 englobe 子字符串。查看此帖子stackoverflow.com/a/54877538/2303865
      • for index in str.indices { for idx in str[index...].indices { print(str[idx]) } }
      【解决方案3】:

      如果我正确理解了问题陈述,则 OP 需要这个 -

      你好
      你好
      llo
      lo
      o

      我们可以使用苹果提供的suffix方法。

      let str = "Hello"
      var lengthOfString = str.count
      
      for (i, val) in str.enumerated() {
          print(String(str.suffix(lengthOfString - i)))
      }
      

      我们不需要上面for循环中的val,所以我们可以重写上面的for循环如下。

      var str = "Hello"
      var lengthOfString = str.count
      
      for i in 0..<lengthOfString {
          print(String(str.suffix(lengthOfString - i)))
      }
      

      上述两个 for 循环都会给出相同的期望输出。

      【讨论】:

        猜你喜欢
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多