我正在尝试编写一个将arrayOne,arrayTwo和arrayThree作为输入的函数。如果arrayTwo的最后一个元素具有任何0,则该函数应该从数组中删除这些元素,以及从arrayOne中删除相同的元素。当我运行代码并尝试对其进行测试时,出现错误:“被信号4终止”。
可能是什么问题?
var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endElement = arrayTwoNew.last
if endElement == 0 {
var counter = arrayTwoNew.count
while arrayTwoNew[counter] == 0 {
var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)
var 2ndElementToBeRemoved = arrayOneNew.remove(at: counter - 1)
}
}
答案 0 :(得分:1)
您的主要问题是将counter
设置为arrayTwoNew.count
的{{1}}比1
中的最后一个有效索引大,因此arrayTwoNew
崩溃时索引超出范围。
也:
while arrayTwoNew[counter] == 0
可能是要删除var elementToBeRemoved = arrayTwoNew.remove(at: counter - 1)
中的最后一项,但这更容易实现:
arrayTwoNew
尤其是因为您没有使用arrayTwoNew.removeLast()
。
我认为您正在尝试这样做:
elementToBeRemoved
答案 1 :(得分:0)
您正在创建一个新数组“ arrayTwoNew”,它将与原始数组
混合var arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
现在,我还在为您的.remove苦苦挣扎-这将返回一个元素,因此将无法使用。我通常会在这里使用过滤器,但不确定您在做什么!
//带删除的代码(用过滤器替换?)可以帮助您入门:
let arrayOne = [1,2,3]
let arrayTwo = [2,3,4]
let arrayThree = [5,6,7]
var arrayOneNew = arrayOne
var arrayTwoNew = arrayTwo
var arrayThreeNew = arrayThree
var endIndex = arrayTwoNew.last
if endIndex == 0 {
let counter = arrayTwoNew.count
// arrayTwoNew = arrayTwoNew.remove(at: counter - 1)
while arrayTwoNew[counter] == 0 {
// arrayOneNew = arrayOneNew.remove(at: counter - 1)
}
}