swift 在for循环中打印字符串(ABCDEFG)中每隔一个字母(如A,C,E)的问题[重复]

8yoxcaq7  于 2023-03-28  发布在  Swift
关注(0)|答案(2)|浏览(74)

此问题在此处已有答案

How to capitalize every other letter in a string/array in Swift?(3个答案)
昨天关门了。
我如何创建一个for-in循环,它将循环遍历alphabet中的字符,如果你在一个你不想打印的字母上,通过继续下一次迭代来打印每隔一个字母?
我的代码是:

let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

for letter in alphabet  {
    if letter % 2 {
        continue
    }
    print(letter)
}

这是行不通的。
我试着运行它,但它没有工作。我试着索引,但没有工作。

uqjltbpv

uqjltbpv1#

一种方法是使用enumerated并对索引进行过滤

for (index, letter) in alphabet.enumerated() where index.isMultiple(of: 2) {
    print(letter)
}

或者更传统的循环

var doPrint = true
for letter in alphabet {
    if doPrint { print(letter)}
    doPrint.toggle()
}
nxagd54h

nxagd54h2#

你的代码不是有效的Swift语法。请注意,如果你想迭代集合索引并检查索引是否为偶数,除非你检查到起始索引的距离,否则String.Index不是一个选项。完成你想要的最简单的方法是添加一个Boolean var并在每次迭代后切换它:

let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var isEven: Bool = true
for letter in alphabet {
    defer { isEven.toggle() }
    if !isEven {
        continue
    }
    print(letter)
}

另一个更复杂的方法是使用sequence方法:

for char in sequence(state: alphabet.startIndex, next: { index in
    defer { let _ = alphabet.formIndex(&index, offsetBy: 2, limitedBy: alphabet.endIndex) }
    return index < alphabet.endIndex ? alphabet[index] : nil
}) {
    print(char)
}

这些将打印:
A
C
E
G

K
M
O
Q
S
U
W
Y

相关问题