从 Swift 的嵌套循环中的特定索引枚举字符串

Enumerate String from specific index in nested loop in Swift

使用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开始?

谢谢

您可以使用 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 的建议)

您可以使用 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会持有[=11=创建的视图中的索引]

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

Hello
ello
llo
lo
o

我们可以使用Apple提供的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 循环都会给出相同的期望输出。