在 Swift 中向陣列新增元素
在本文中,您將學習如何在 Swift 中向陣列新增元素。
在開始學習將元素插入陣列之前,您需要了解陣列的型別。
陣列語法
// Declare an immutable array let arrayName: [valuetype] = [array element 1, array element 1, ...array element n] // Declare a mutable array var arrayName: [valuetype] = [array element 1, array element 1, ...array element n]
在 Swift 中,我們可以使用 let 宣告不可變陣列,使用 var 宣告可變陣列。對於不可變陣列,我們必須在初始化時提供陣列元素。
如何將元素追加到陣列中?
現在,如果您想將元素追加到陣列中,我們必須使用 var 關鍵字將其設為可變。讓我們看看如何追加元素。
語法
要在 Swift 中向陣列新增元素,可以使用 Array 型別的 append 方法。此方法將一個新元素新增到陣列的末尾。
numbers.append(n)
基本上,您可以將要追加的元素傳遞到給定的陣列中。
演算法
步驟 1 - 宣告一個可變陣列
步驟 2 - 呼叫 append() 方法追加元素
步驟 3 - 列印輸出
示例
例如,如果您有一個名為 numbers 的整數陣列,並且您想向其中新增數字 25,您可以這樣做 -
var numbers: [Int] = [10, 20, 4, 56, 2, 67, 78] print("Numbers before: \(numbers)") numbers.append(25) print("Numbers after: \(numbers)")
輸出
Numbers before: [10, 20, 4, 56, 2, 67, 78] Numbers after: [10, 20, 4, 56, 2, 67, 78, 25]
如何一次新增多個元素?
語法
是的,您可以一次新增多個元素,如下所示 -
numbers.append(contentsOf: [Array Elements])
基本上,您可以將一個數組傳遞給另一個已設為可變的陣列,以將所有元素追加到其中。
演算法
步驟 1 - 宣告一個可變陣列
步驟 2 - 呼叫 number.append() 函式追加多個元素
步驟 3 - 列印輸出
示例
var numbers: [Int] = [10, 20, 4, 56, 2, 67, 78] print("Numbers before: \(numbers)") numbers.append(contentsOf: [40, 45, 50]) print("Numbers after: \(numbers)")
輸出
Numbers before: [10, 20, 4, 56, 2, 67, 78] Numbers after: [10, 20, 4, 56, 2, 67, 78, 40, 45, 50]
您可以使用 += 運算子追加元素,如下所示 -
numbers += [40, 45, 50]
請記住,append() 方法會將元素新增到陣列的末尾。
如何在陣列的特定索引處插入元素?
語法
numbers.insert(<Element>, at: <Index>)
在 insert() 方法中,您必須傳遞一個元素以及要在其中插入該元素的索引。
演算法
步驟 1 - 宣告一個可變陣列
步驟 2 - 使用元素和索引呼叫 insert() 方法
步驟 3 - 列印輸出
示例 1
如果您想在陣列的特定索引處插入元素,可以使用 insert(_:at:) 方法。例如 -
var numbers: [Int] = [10, 20, 4, 56, 2, 67, 78] print("Numbers before: \(numbers)") numbers.insert(15, at: 1) print("Numbers after: \(numbers)")
輸出
Numbers before: [10, 20, 4, 56, 2, 67, 78] Numbers after: [10, 15, 20, 4, 56, 2, 67, 78]
這將在 numbers 陣列的索引 1 處插入數字 15,並將現有元素向右移動。
示例 2
請注意,您不能在超出陣列範圍的索引處向陣列中插入元素。程式碼將出現如下異常 -
var numbers: [Int] = [10, 20, 4, 56, 2, 67, 78] numbers.insert(15, at: 10)
輸出
Fatal error: Array index is out of range Current stack trace: 0 libswiftCore.so 0x00007f27c596a2e0 swift_reportError + 50 1 libswiftCore.so 0x00007f27c59def40 _swift_stdlib_reportFatalErrorInFile + 112 2 libswiftCore.so 0x00007f27c56c9026+ 1425446 3 libswiftCore.so 0x00007f27c56c8c4f + 1424463 4 libswiftCore.so 0x00007f27c56c89ec + 1423852 5 libswiftCore.so 0x00007f27c56c8500 _assertionFailure(_:_:file:line:flags:) + 441 6 libswiftCore.so 0x00007f27c56b4461 + 1340513 8 swift-frontend 0x000000000058765a + 1603162 9 swift-frontend 0x000000000054c778 + 1361784 10 swift-frontend 0x000000000051c4ca + 1164490 11 swift-frontend 0x000000000051bb7c + 1162108 12 swift-frontend 0x0000000000510710 + 1115920 13 swift-frontend 0x000000000049be53 + 638547 14 libc.so.6 0x00007f27c721ab10 __libc_start_main + 231 15 swift-frontend 0x000000000049b96a + 637290 Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the project and the crash backtrace. Stack dump: 0. Program arguments: /usr/bin/swift-frontend -frontend -interpret main.swift -disable-objc-interop -module-name main 1. Swift version 5.4.2 (swift-5.4.2-RELEASE) 2. While running user code "main.swift" /usr/bin/swift-frontend[0x5806484] /usr/bin/swift-frontend[0x5803f1e] /usr/bin/swift-frontend[0x580666c] /lib/x86_64-linux-gnu/libpthread.so.0(+0x12980)[0x7f27c8995980] /usr/lib/swift/linux/libswiftCore.so(+0x15c02a)[0x7f27c56c902a] /usr/lib/swift/linux/libswiftCore.so(+0x15bc4f)[0x7f27c56c8c4f] /usr/lib/swift/linux/libswiftCore.so(+0x15b9ec)[0x7f27c56c89ec] /usr/lib/swift/linux/libswiftCore.so($ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_A2HSus6UInt32VtF+0x1b9)[0x7f27c56c86b9] /usr/lib/swift/linux/libswiftCore.so(+0x147461)[0x7f27c56b4461] [0x7f27c8d3a0fc] /usr/bin/swift-frontend[0x58765a] /usr/bin/swift-frontend[0x54c778] /usr/bin/swift-frontend[0x51c4ca] /usr/bin/swift-frontend[0x51bb7c] /usr/bin/swift-frontend[0x510710] /usr/bin/swift-frontend[0x49be53] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x7f27c721abf7] /usr/bin/swift-frontend[0x49b96a] /usr/bin/timeout: the monitored command dumped core Illegal instruction
此錯誤清楚地表明,由於超出範圍,因此無法在給定索引處插入元素。
結論
Swift 提供了兩種不同的方法來修改陣列。這兩種方法用於不同的情況。在將元素插入陣列時,您必須注意索引範圍。