我正在为iOS这款二十一点应用程序工作,但无法正常使用该功能。我在Python中构建了它,就像它的魅力一样工作,但是当我适应它时却有些奇怪。想法是获得卡的所有可能的价值。一旦开始工作,我将对这些数字进行汇总。因此,[[1,11],[4],[5]]
将输出[10,20]
。
Python代码
init_array = [[1,11],[3],[4],[1,11],[5]]
r = [[]]
for x in init_array:
t = []
for y in x:
for i in r:
t.append(i + [y])
r = t
print(r)
输出:
[[1, 3, 4, 1, 5], [11, 3, 4, 1, 5], [1, 3, 4, 11, 5], [11, 3, 4, 11, 5]]
快捷代码
var init_array = [[Int]]()
init_array.append([1,11])
init_array.append([3])
init_array.append([4])
init_array.append([1,11])
init_array.append([5])
var r = [[Int]]()
for x in init_array {
var t = [Int]()
for y in x{
for i in r {
t.append(contentsOf: (i + [y]))
}
}
r = [t]
}
print(r)
输出:
[[3, 4, 1, 3, 4, 11, 5]]
它是较大函数的一部分,因此创建init_array
变量并为两个示例打印r变量均用于测试。到我的故障代码时,已经生成了init_array。
这可能是简单的代码行,但是我已经尝试了好几天了。我是Swift的新手,所以这可能需要更高级的人2秒钟才能弄清。
答案 0 :(得分:0)
初始化r
时:
在python中,r
的长度为1
,而在快速范围内,长度为0
。这是因为,在python r
中,[[]]
的内部是一个空列表。但是很快就没发生[]
。这导致了不必要的输出。
最后,我找到了一种解决方法,可以在开头添加一个空列表到r
中。
var r = [[Int]]()
r.append([])
t.append(ContentsOf ...)
并没有创建您想要的数组。
这是最终解决方案
var init_array = [[Int]]()
init_array.append([1,11])
init_array.append([3])
init_array.append([4])
init_array.append([1,11])
init_array.append([5])
var r = [[Int]]()
r.append([])
print(r.count,r) // debuggging part
for x in init_array {
var t = [[Int]]()
for y in x{
for i in r {
//method 1
var dm=[Int]() //for making the kind of arrays u wanted
dm.append(contentsOf: (i + [y])) // appending it to array
t.append(dm)
// Or
//method 2
t+=[(contentsOf: (i + [y]))] as! [[Int]] //HereWeTypeCastToInt
}
print(t,y) // debuggging part
}
r = t
}
print(r)
输出:[[1、3、4、1、5],[11、3、4、1、5],[1、3、4、11、5],[11、3、4、11 ,5]]