我编写了这个简单的算法来从输入数组中删除重复值,但是我从数组中删除元素的行得到了运行时错误,错误发生在这一行array.remove(at: i)
。我正在使用Codepair和Swift 4。
func unique(_ arr:[Int]) -> [Int] {
var array = arr
var uniqueSet = Set<Int>()
for i in 0 ..< array.count {
if uniqueSet.contains(array[i]) {
print("remove \(arr[i]) for i \(i) from array")
array.remove(at: i)
} else {
print("insert \(arr[i]) into set")
uniqueSet.insert(array[i])
}
}
return array
}
print(unique([1, 2, 4, 4, 5, 6]))
答案 0 :(得分:0)
你的主要问题是在循环时从数组插入和删除,这会使它崩溃或永远循环
不需要你可以
let dupArr = [1, 2, 4, 4, 5, 6]
let result = Set(dupArr).sorted() // [1, 2, 4, 5, 6]
如果你想手动
func unique(_ arr:[Int]) -> [Int] {
var result = [Int]()
for item in arr {
if !result.contains(item) {
result.append(item)
}
}
return result
}