在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中向数组添加一个元素,你可以使用数组类型的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]
这将在数字数组的索引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提供了两种不同的方法来修改数组。这两种方法在不同的情况下使用。当你向数组中插入一个元素时,你必须照顾到索引的约束。