我試圖填充一個多維數組使用此代碼多維數組:填充用循環
var array = [[Int]]()
for i in 0...3 {
for j in 0...3{
array[i][j] = i + j <<- Error
}
}
但我得到一個錯誤:
fatal error: Index out of range
我在做什麼錯?
我試圖填充一個多維數組使用此代碼多維數組:填充用循環
var array = [[Int]]()
for i in 0...3 {
for j in 0...3{
array[i][j] = i + j <<- Error
}
}
但我得到一個錯誤:
fatal error: Index out of range
我在做什麼錯?
調用array[i][j]
適用於已經存在的元素。你不能用它來初始化數組,因爲目前它只是一個空數組。您應該使用.append
來代替。請記住,這實際上不是像Rob Napier所說的多維數組,但它在這種情況下實現了相同的目標。嘗試是這樣的:
var array = [[Int]]()
for i in 0...3 {
var subArray = [Int]()
for j in 0...3 {
subArray.append(i + j)
}
array.append(subArray)
}
此打印:
[[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
再次,可能不是最好的方法,但是這是你是如何能做到這一點的斯威夫特。
[[Int]]
不是一個多維數組。它是一個數組數組。這是一個非常不同的事情。例如,在數組數組中,每行可能有不同數量的列。使用嵌套數組作爲多維數組通常是個不錯的主意,特別是可變的數組。修改通常非常低效,因爲每次更改時都會導致大量複製。
Swift沒有多維數組類型。如果你真的需要它,你通常必須自己構建它,或重新設計以避免它。如果它足夠小,而且變化不大,這不是什麼大不了的事情,但不要讓它們變大。
這就是說,問題是元素[0][0]
不存在,因爲您沒有創建它。在使用之前,您需要以這種方式初始化陣列:
var array = Array(repeating: Array(repeating: 0, count: 4), count: 4)
這將創建一個由4個4個零組成的數組。
如果你想明確你所描述的佈局,可能是一個更好的方法是映射,這很可能將是更有效的(因爲它不保留修改嵌套數組):
let array = (0...3).map { i in
(0...3).map { j in
return i + j
}
}
感謝您的解釋。 – Abdou023
謝謝。工作得很好 – Abdou023