我在将此Python函数转换为Swift函数时遇到问题

时间:2020-09-07 02:05:42

标签: python arrays swift

我正在为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秒钟才能弄清。

1 个答案:

答案 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]]