2017-10-12 1 views
-1

Dies ist mein erstes Mal in Swift Codierung. TitelWie verketten mehrere Array-Elemente, wenn die Arrays unterschiedliche Anzahl von Elementen haben?

var licensep1 = ["A","B","C", "E", "U", "D", "T", "R"] 
var licensep2 = ["1", "2", "3", "4", "5"] 
var licensep3 = ["H", "Z", "F", "W", "G", "H", "I", "K"] 
for i in stride(from: 0, to: licensep1.count, by: 1) { 
    print(licensep1[i] + licensep2[i] + licensep3[i] + " " + licensep1[i + 1] + licensep2[i + 1] + licensep3[i + 1]) 
} 

Ich versuche im Grunde zufällige Nummernschilder zu machen, die 6 alphanumerics haben je und ich versuche, nur die fünf Zahlen, die Sie in „licensep2“ sehen können. Wie würden Sie die 5 Nummern erneut durchlaufen, sobald sie die letzte Nummer erreicht haben, während die ursprüngliche Schleife für die Buchstaben fortgesetzt wird? Ich hoffe, meine Frage ist klar

Aktuelle Zeit diese Ausgänge:

  • A1H b2z
  • b2z C3F
  • C3F E4W
  • E4W U5G

aber ich würde es gerne um weiter zu geben, bis licensep1 "R" erreicht, die Nummern wiederverwendend.

+0

Wo ist der zufällige Teil? – matt

Antwort

1

Der stumme Ansatz Pad licensep2 Array einfach wäre es die gleiche Länge wie die andere zu machen, so dass anstelle von

var licensep2 = ["1", "2", "3", "6", "9"] 

Sie müssen es wie folgt aussehen:

var licensep2 = ["1", "2", "3", "6", "9", "1", "2", "3"] 

Besserer, intelligenterer Ansatz wäre die Verwendung von Modulo (%) auf dem Index, der verwendet wird, um Elemente aus dem Array auszuwählen (Modulo nach Array-Länge natürlich). So während Verkettung:

... + licensep2[i % licensep2.count] + ... 

auch dieser Teil der Verkettung:

licensep1[i + 1] 

vielleicht

licensep1[i] 

sein sollte, sonst werden Sie bei der letzten Iteration außerhalb der Grenzen des Arrays erreicht scheitern von deine Schleife. Oder modulo dies auch.

1

Verwenden Sie den Zauber Rest (oder "Modulo") Operator:

var licensep1 = ["A","B","C", "E", "U", "D", "T", "R"] 
var licensep2 = ["1", "2", "3", "4", "5"] 
var licensep3 = ["H", "Z", "F", "W", "G", "H", "I", "K"] 
for i in stride(from: 0, to: licensep1.count, by: 1) { 
    print(licensep1[i] + licensep2[i % 5] + licensep3[i] + " " + licensep1[i + 1] + licensep2[(i + 1) % 5] + licensep3[i + 1]) 
} 

Hinweis: wenn du gehst einen index out of range Fehler dieser Stromschleife, gegeben zu bekommen. Fügen Sie Code hinzu, um sicherzustellen, dass Ihre Werte i + 1 die Länge der Arrays licensep1 und licensep3 nicht überschreiten!

Mit dem Restoperator können Sie einen Zähler neu starten, sobald er einen bestimmten Wert erreicht. Zum Beispiel:

i == 0 i % 5 = 0 
i == 1 i % 5 = 1 
i == 2 i % 5 = 2 
i == 3 i % 5 = 3 
i == 4 i % 5 = 4 
i == 5 i % 5 = 0 
i == 6 i % 5 = 1 
... and so on. 

Ihr Rest wird immer zwischen 0 und 4 (und deckt damit die fünf möglichen Werte in Ihrem licensep2 Array).

Verwandte Themen