gpt4 book ai didi

arrays - Swift ArraySlice 索引超出 While 循环中非空数组中 Item[0] 的范围

转载 作者:行者123 更新时间:2023-12-04 18:01:50 25 4
gpt4 key购买 nike

这与问题 here 有关,但答案只显示了如何使该实例工作,但没有解释哪里出了问题,所以我不确定如何使我的工作正常。以下是有问题的代码:

let texts = ["abcdeb", "abbd", "abde", "abcd", "abcde"]
var start = 0
while start < texts.count {
var newtexts = texts[start..<texts.count] + texts[0..<start]
print("ding", newtexts)
print("dong", newtexts[0])
start += 1
}

它产生以下内容:

ding ["abcdeb", "abbd", "abde", "abcd", "abcde"]
dong abcdeb
ding ["abbd", "abde", "abcd", "abcde", "abcdeb"]
fatal error: ArraySlice index out of range

通过将我引用的索引更改为 1,我使循环成功了两次,但两次结果都是“abbd”。 2 让我获得三个成功的循环和“abde”,等等。

知道发生了什么以及如何解决它吗?

谢谢!

编辑:如果我切换到“newtexts[newtext.startIndex]”,我可以让它工作,但我不确定为什么每次我都在创建一个新数组时,startIndex 不应该总是 0 吗?

最佳答案

这行得通

let texts = ["abcdeb", "abbd", "abde", "abcd", "abcde"]

var start = 0

while start < texts.count {

var newtexts = texts[start..<texts.count] + texts[0..<start]
print("ding", newtexts)
print("dong", newtexts[start]) // Or, you could use Array(newtexts)[0] instead of newtexts[start]
start++
}

显然是 newTexts 的第一个值每次运行循环时都不能被 0 访问。 循环运行一次后,newtexts不再有可被0访问的元素,第二次运行时,不再有可被1访问的元素,以此类推。这是因为您定义 newtexts 的方式.

如果你创建一个新数组,例如,

var arrayz = texts[1...3] + texts[3...4]
arrayz[0] // Error, Bad instruction...

你在这里得到一个错误,因为这个新的“数组”包含可以从 1 开始访问的元素。 .这类似于您之前的循环中发生的情况。“数组”newtexts (或 arrayz )您正在创建的实际上不是一个数组;它的类型是 ArraySlice<String> .这意味着它不会像普通数组那样被访问。您将能够根据您定义它的方式访问它的元素。

希望你明白。 :)

关于arrays - Swift ArraySlice 索引超出 While 循环中非空数组中 Item[0] 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34035694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com