当数组具有不同数量的元素时,如何连接多个数组元素?

时间:2017-10-12 18:44:05

标签: swift

这是我第一次在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个字母数字的随机牌照,我试图只使用你在“licensep2”中看到的那5个数字。一旦达到最后一个数字,你将如何重新循环5个数字,同时继续原始的字母循环?我希望我的问题很清楚

目前输出:

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

但是我希望它继续输出,直到licensep1达到“R”,重复使用这些数字。

2 个答案:

答案 0 :(得分:1)

最愚蠢的方法是简单地填充licensep2数组,使其与其他数组的长度相同,因此不是

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

你必须看起来像这样:

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

更好,更智能的方法是使用modulo(%)用于从数组中选择项目的索引(当然以数组长度为模)。所以在连接期间:

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

也是连接的这一部分:

licensep1[i + 1]

也许应该是

licensep1[i]

否则,在循环的最后一次迭代中,您将无法到达数组的边界之外。或者也是模数。

答案 1 :(得分: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个可能值。)