我对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数组从头开始。如何防止这种情况发生,以便所有循环检索第二项?
提前致谢
很难想象你的意图可能是什么(你没有解释过),所以我将给出两个不同答案的假设。 (注意,这样做我将消除你的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)
}
然而,在现实生活中,最好只有一个数组,其元素是具有三个属性的结构(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)
}
}
}