[英]I'm having trouble converting this Python function to a Swift function
我正在開發適用於 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]]
SWIFT代碼
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 比較陌生,所以這可能需要更高級的人兩秒鍾才能弄清楚。
當您初始化r
:在 python 中, r
長度為1
,而在 swift 中,長度為0
。 這是因為,在 python 中, r
被初始化為一個空列表,其中[[]]
。 但很快,它並沒有發生[]
。 這導致了不需要的輸出。
最后我找到了一種方法來修復它,方法是在開始時將一個空列表附加到r
中。
var r = [[Int]]()
r.append([])
此外t.append(ContentsOf ...)
沒有按照您的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] ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.