在 Swift 中向数组添加元素

swiftserver side programmingprogramming

在本文中,您将学习如何在 Swift 中向数组添加元素。

在开始学习将元素插入数组之前,您需要了解数组的类型。

数组语法

// 声明一个不可变数组
let arrayName: [valuetype] = [数组元素 1, 数组元素 1, ...数组元素 n]
// 声明一个可变数组
var arrayName: [valuetype] = [数组元素 1, 数组元素 1, ...数组元素 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)")
numbers.append(25)
print("之后的数字:\(numbers)")

输出

之前的数字:[10, 20, 4, 56, 2, 67, 78]
之后的数字:[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)")
numbers.append(contentsOf: [40, 45, 50])
print("之后的数字: \(numbers)")

输出

之前的数字:[10, 20, 4, 56, 2, 67, 78]
之后的数字:[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]

这会将数字 15 插入到 numbers 数组中的索引 1 处,将现有元素移至正确。

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


相关文章