希望通过多个结构数组使用其中一个变量来增加每个数组的循环数。谢谢!
struct Example {
var partOne: Int
var partTwo: Int
var partThree: Int
}
var one = Example(partOne: 10, partTwo: 11, partThree: 12)
var two = Example(partOne: 10, partTwo: 11, partThree: 12)
var arrayOfExamples = [one, two]
for i in 0...arrayOfExamples[0].partThree {
print(i)
}
//once i = 12, then
for i in 0...arrayOfExamples[1].partThree {
print(i)
}
最佳答案
只需使用嵌套循环,外部循环在arrayOfExamples
的项上迭代:
for item in arrayOfExamples {
for i in 0...item.partThree {
print(i)
}
}
通过使用
KeyPath
s,您可以编写一个函数,该函数使用调用方指定的属性对值进行迭代:func iterateOverKeyPath(array: [Example], keyPath: KeyPath<Example, Int>) {
for item in array {
for i in 0...item[keyPath: keyPath] {
print(i)
}
}
}
// iterate using partThree property
iterateOverKeyPath(array: arrayOfExamples, keyPath: \Example.partThree)
// now do the same for partTwo
iterateOverKeyPath(array: arrayOfExamples, keyPath: \Example.partTwo)
而且
Example
struct
没有什么特别之处,所以我们可以将此泛型设置为适用于任何类型:func iterateOverKeyPath<T>(array: [T], keyPath: KeyPath<T, Int>) {
for item in array {
for i in 0...item[keyPath: keyPath] {
print(i)
}
}
}
关于arrays - 遍历多个结构的最简单方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50946451/