希望通过多个结构数组使用其中一个变量来增加每个数组的循环数。谢谢!

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)
    }
}

通过使用KeyPaths,您可以编写一个函数,该函数使用调用方指定的属性对值进行迭代:
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)

而且Examplestruct没有什么特别之处,所以我们可以将此泛型设置为适用于任何类型:
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/

10-12 16:16