Swift: выход, вложенный в цикл, при сохранении внешнего цикла для индекса - PullRequest
0 голосов
/ 25 апреля 2019

Я довольно новичок в Swift, и я уверен, что это относительно простой вопрос. У меня есть вложенный цикл, и я хотел бы вырваться из внутренних циклов после добавления данных в массив. Ниже мой код:

            for set in self.setArray{
                self.itemData = "Set "
                self.itemData += set
                self.itemData += "  "
                for reps in self.repsArray{
                    self.itemData += reps
                    self.itemData += " Reps  "
                    for weight in self.weightArray{
                        self.itemData += "Weight "
                        self.itemData += weight
                        self.itemData += "kg"
                        structSetArray.append(self.itemData)
                        self.itemData = ""
                        break
                    }
                    break
                }
            }

В настоящее время операторы break позволяют мне вернуться к массиву set и получить следующий элемент, однако это приводит к тому, что массивы reps и weight начать с самого начала снова. Как я могу предотвратить это, чтобы все циклы извлекали второй элемент?

Заранее спасибо

1 Ответ

3 голосов
/ 25 апреля 2019

Трудно представить, каким может быть ваше намерение (а вы этого не объяснили), поэтому я приведу две гипотезы с двумя разными ответами.(Обратите внимание, что при этом я собираюсь исключить ваш self.itemData и заменить его локальной переменной.


Возможно, вы пытаетесь выполнить цикл по трем массивам одновременно. Для этого используйте zip и просто один for цикл.

Это было бы проще, если бы zip3 существовал изначально, вы могли бы написать его, но естьна самом деле нет необходимости:

let zippedArray = zip(setArray, zip(repsArray, weightArray))
for tuple in zippedArray {
    let set = tuple.0
    let reps = tuple.1.0
    let weight = tuple.1.1
    var itemData = "Set "
    itemData += set
    itemData += "  "
    itemData += reps
    itemData += " Reps  "
    itemData += "Weight "
    itemData += weight
    itemData += "kg"
    structSetArray.append(itemData)
}

В реальной жизни, однако, было бы лучше иметь только один массив, элементами которого являются struct с тремя свойствами (set, reps и weight).


С другой стороны, возможно, вы пытаетесь просмотреть все возможные комбинации из трех ваших массивов. В этом случае переместите всю «печать» значений в самый внутренний цикл, например:

        for set in self.setArray{
            for reps in self.repsArray{
                for weight in self.weightArray{
                    var itemData = "Set "
                    itemData += set
                    itemData += "  "
                    itemData += reps
                    itemData += " Reps  "
                    itemData += "Weight "
                    itemData += weight
                    itemData += "kg"
                    structSetArray.append(itemData)
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...