In Swift möchte ich zwei Sequenzen zu einer Sequenz von Tupeln "verbinden"

8

Ich möchte zwei (oder mehr) Sequenzen verbinden, die dann eine Folge von Tupeln erzeugen würden. Wobei das erste Tupel das erste Element jeder Sequenz enthalten würde und das zweite Tupel die zweiten Elemente usw. enthalten würde. Unten ist eine Beispielfunktion, die zwei Arrays nimmt und ein drittes Array von Tupeln erzeugt. Ich kann dann diese Sequenz verwenden, um mit den Funktionen map (), filter () und reduce () zu arbeiten.

Mein Beispiel funktioniert, aber es fehlt an einer Menge Möglichkeiten. Es ist für Arrays nicht für alle Sequenzen, es stoppt Tupel zu generieren, wenn die erste Sequenz von Elementen läuft. Ich möchte, dass Nils in den Tupeln für die kurzen Sequenzen sind, die keine Elemente mehr liefern können. Es ist nur für zwei Arrays, ich möchte es für eine beliebige Anzahl von Sequenzen,

Teillösungen wären hilfreich. Ich bin ein funktionierender Programmierneuling, also würde der korrekte Name für diese Funktion auch geschätzt werden. Vielleicht ist es schon in der switfz-Bibliothek Ich weiß nur, wie es heißt. Ich wählte "Join", weil es in etwa dem SQL "Join" ähnlich ist, der auch Tupel (a.k.a. rows) erstellt

%Vor%     
ahalls 06.08.2014, 06:21
quelle

5 Antworten

13

Es gibt bereits eine Funktion namens Zip2 :

%Vor%

Diese Funktion puffert jedoch nicht mit nil und verwendet auch die kürzeste der beiden Sequenzen. Beachten Sie jedoch, dass es nicht erforderlich ist, dass die Typen zwischen den beiden Sequenzen übereinstimmen und dass es eine beliebige Sequenz benötigt, nicht nur Arrays.

Hier ist meine eigene benutzerdefinierte Implementierung von Zip2WithNilPadding:

%Vor%

Wenn Sie Fragen zur konkreten Implementierung haben, lassen Sie es mich wissen und ich werde versuchen, dies zu klären. Diese Implementierung sollte Ihnen auch beim Erstellen einer Zip-Datei helfen, die ein Array von Sequenzen enthält. Leider müssten sie in diesem Fall alle eine Sequenz desselben Typs sein, weil Sie keine variable Menge an Generika haben können.

    
drewag 06.08.2014, 06:25
quelle
5

Es gibt eine freie Funktion zum Erstellen einer Zip2Sequence seit Swift 3:

%Vor%     
nils 16.12.2016 11:07
quelle
4

Die Syntax wurde in Zip2Sequence geändert:

Array(Zip2Sequence(arr, second))

    
Rich Fox 16.12.2015 00:58
quelle
2

Warum nicht einfach Zip2 benutzen?

%Vor%     
jtbandes 06.08.2014 06:27
quelle
1

Hier ist eine schnelle Version von drewags Antwort. Ich verpackte es als Swift 4-Paket auf GitHub zusammen mit einigen Tests: Ссылка

Hier ist der relevante Code in Swift 4:

%Vor%     
Daniel R 07.12.2017 21:07
quelle

Tags und Links