2017-10-12 29 views
-1

這是我第一次在Swift中編碼。標題如何在數組數量不同時連接多個數組元素?

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

基本上,我試圖讓有每6個字母數字隨機車牌和我想只使用那些5個號碼,你在「licensep2」看。你將如何重新循環5個數字,一旦達到最後的數字,同時繼續原來的字母循環?我希望我的問題是清楚的

目前,它輸出這樣的:

  • A1H B2Z
  • B2Z C3F
  • C3F E4W
  • E4W U5G

,但我想它繼續輸出,直到licensep1達到「R」,重新使用這些數字。

+0

隨機部分在哪裏? – matt

回答

1

最愚蠢的做法是簡單地墊licensep2陣列,使其在相同長度的其他人,所以不是

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

你將不得不使它看起來像這樣:

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

更好,更聰明的方法將用於模索(%)索引用於從數組中挑選項目(當然,按數組長度模數)。所以級聯時:

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

還串聯的這一部分:

licensep1[i + 1] 

也許應該

licensep1[i] 

,否則你將無法在最後一次迭代到達您的數組的範圍之外你的循環。或者以此爲模。

1

使用魔法剩餘(或「模」)操作:

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

注意:您會得到給定這個電流回路的index out of range錯誤,雖然。添加代碼以確保您的i + 1值不超過licensep1licensep3陣列的長度!

餘數運算符允許您在計數達到某個值後重新開始計數。例如:

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. 

你的其餘部分將始終爲0和4(因此覆蓋在licensep2陣列的5個可能的值)之間。

相關問題