Swift:退出嵌套for循环,同时保持外部循环的索引

问题描述 投票:-1回答:1

我对Swift相当新,我相信这是一个相对直截了当的问题。我有一个嵌套的for循环,我想在将数据附加到数组后突破内部循环。以下是我的代码:

            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数组从头开始。如何防止这种情况发生,以便所有循环检索第二项?

提前致谢

swift for-loop
1个回答
3
投票

很难想象你的意图可能是什么(你没有解释过),所以我将给出两个不同答案的假设。 (注意,这样做我将消除你的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)
}

然而,在现实生活中,最好只有一个数组,其元素是具有三个属性的结构(setrepsweight)。


另一方面,可能是您尝试遍历三个阵列的所有可能组合。在这种情况下,将值的所有“打印”移动到最里面的循环中,如下所示:

        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)
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.