这是我第一次在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个数字,同时继续原始的字母循环?我希望我的问题很清楚
目前输出:
但是我希望它继续输出,直到licensep1达到“R”,重复使用这些数字。
答案 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
值不超过licensep1
和licensep3
数组的长度!
余数运算符允许您在计数达到某个值后重新启动计数。例如:
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个可能值。)