从Swift 4中的数组中删除元素时出现运行时错误

时间:2018-06-01 00:23:36

标签: swift

我编写了这个简单的算法来从输入数组中删除重复值,但是我从数组中删除元素的行得到了运行时错误,错误发生在这一行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]))

1 个答案:

答案 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
}