Mit Swift 5 können Sie einen der 4 folgenden Spielplatzcodes verwenden, um Ihr Problem zu lösen.
Im einfachsten Fall können Sie zip(_:_:)
eine neue Folge von Paaren (Tupel) der Elemente Ihrer anfänglichen Arrays erstellen.
let strArr1 = ["Some1", "Some2", "Some3"]
let strArr2 = ["Somethingelse1", "Somethingelse2"]
let sequence = zip(strArr1, strArr2)
for (el1, el2) in sequence {
print("\(el1) - \(el2)")
}
# 2. Mit Array
der makeIterator()
Methode von und einer while-Schleife
Es ist auch einfach, zwei Arrays gleichzeitig mit einer einfachen while-Schleife und Iteratoren zu durchlaufen:
let strArr1 = ["Some1", "Some2", "Some3"]
let strArr2 = ["Somethingelse1", "Somethingelse2"]
var iter1 = strArr1.makeIterator()
var iter2 = strArr2.makeIterator()
while let el1 = iter1.next(), let el2 = iter2.next() {
print("\(el1) - \(el2)")
}
#3. Verwenden eines benutzerdefinierten Typs, der den Anforderungen entsprichtIteratorProtocol
Unter bestimmten Umständen möchten Sie möglicherweise einen eigenen Typ erstellen, der die Elemente Ihrer Initialen-Arrays koppelt. Dies ist möglich, indem Sie Ihren Typ anpassen IteratorProtocol
. Beachten Sie, dass Sequence
Sie Instanzen davon direkt in einer for-Schleife verwenden können , indem Sie Ihren Typ auch an das Protokoll anpassen :
struct TupleIterator: Sequence, IteratorProtocol {
private var firstIterator: IndexingIterator<[String]>
private var secondIterator: IndexingIterator<[String]>
init(firstArray: [String], secondArray: [String]) {
self.firstIterator = firstArray.makeIterator()
self.secondIterator = secondArray.makeIterator()
}
mutating func next() -> (String, String)? {
guard let el1 = firstIterator.next(), let el2 = secondIterator.next() else { return nil }
return (el1, el2)
}
}
let strArr1 = ["Some1", "Some2", "Some3"]
let strArr2 = ["Somethingelse1", "Somethingelse2"]
let tupleSequence = TupleIterator(firstArray: strArr1, secondArray: strArr2)
for (el1, el2) in tupleSequence {
print("\(el1) - \(el2)")
}
Alternativ zum vorherigen Beispiel können Sie verwenden AnyIterator
. Der folgende Code zeigt eine mögliche Implementierung innerhalb einer Array
Erweiterungsmethode:
extension Array {
func pairWithElements(of array: Array) -> AnyIterator<(Element, Element)> {
var iter1 = self.makeIterator()
var iter2 = array.makeIterator()
return AnyIterator({
guard let el1 = iter1.next(), let el2 = iter2.next() else { return nil }
return (el1, el2)
})
}
}
let strArr1 = ["Some1", "Some2", "Some3"]
let strArr2 = ["Somethingelse1", "Somethingelse2"]
let iterator = strArr1.pairWithElements(of: strArr2)
for (el1, el2) in iterator {
print("\(el1) - \(el2)")
}