Есть ли способ использовать цикл for-in через массив строк с индексом больше 1, используя .enumerated () и stride, чтобы сохранить индекс и значение?

Например, если бы у меня был массив

Var testArray2: [String] = ["a", "b", "c", "d", "e"]

И я хотел перебрать, используя testArray2.enumerated (), а также используя шаг на 2 для вывода:

0, a
2, c
4, e

Так что в идеале что-то вроде этого; однако этот код не будет работать:

for (index, str) in stride(from: 0, to: testArray2.count, by: 2){
    print("position \(index) : \(str)")
}
1
Biggytiny 25 Апр 2017 в 08:23

2 ответа

Лучший ответ

У вас есть два способа получить желаемый результат.

  1. Используя только stride

    var testArray2: [String] = ["a", "b", "c", "d", "e"]
    
    for index in stride(from: 0, to: testArray2.count, by: 2) {
        print("position \(index) : \(testArray2[index])")
    }
    
  2. Использование enumerated() с for in и where.

    for (index,item) in testArray2.enumerated() where index % 2 == 0 {
        print("position \(index) : \(item)")
    }
    
6
Nirav D 25 Апр 2017 в 05:40

Чтобы выполнить итерацию с шагом, вы можете использовать предложение where:

for (index, element) in testArray2.enumerated() where index % 2 == 0 {
    // do stuff
}

Другой возможный способ - сопоставить индексы с набором кортежей индексов и значений:

for (index, element) in stride(from: 0, to: testArray2.count, by: 2).map({($0, testArray2[$0])}) {
    // do stuff
}
3
Palle 25 Апр 2017 в 05:40