我不能理解为什么这个“索引越界”错误发生。我想知道什么是“索引越界”和“索引超出范围”之间的区别,以及为什么我的代码会导致错误。谢谢大家。
密码
var input = readLine()!.split(separator: " ").map{Int($0)!}
var arr = input[1...20]
for (i, a) in arr.enumerated() {
print(i, a)
}
print(arr[0]) // Index out of bounds
输入
输出
0 900
1 901
2 902
3 903
4 904
5 905
6 906
7 907
8 908
9 909
10 910
11 911
12 912
13 913
14 914
15 915
16 916
17 917
18 918
19 919
Swift/SliceBuffer.swift:287: Fatal error: Index out of bounds
2023-05-04 15:01:32.280783+0900 SwiftAlgorithm[86091:6733992] Swift/SliceBuffer.swift:287: Fatal error: Index out of bounds
Program ended with exit code: 9
1条答案
按热度按时间zxlwwiss1#
这是因为数组切片并没有复制元素并创建一个新数组,而是创建了一个指向初始数组的“指针”,因此索引在这里的应用方式与新数组的应用方式不同。这是为了存储器效率的益处而以这种方式实现的。这在Apple developer documentation中有很好的描述,以及如何从初始数组中保留索引。