在 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 提供了两种不同的方法来修改数组。这两种方法用于不同的情况。在将元素插入数组时,您必须注意索引范围。