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

在Swift 4中从数组中删除元素时出现运行时错误,swift,Swift,我编写这个简单的算法是为了从输入数组中删除重复的值,但是我从数组中删除元素的那一行出现了运行时错误,错误发生在这一行array.remove(at:I)。我正在使用Swift 4的代码对 func unique(_ arr:[Int]) -> [Int] { var array = arr var uniqueSet = Set<Int>() for i in 0 ..< array.count { if uniqueSet.contai

我编写这个简单的算法是为了从输入数组中删除重复的值,但是我从数组中删除元素的那一行出现了运行时错误,错误发生在这一行
array.remove(at:I)
。我正在使用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]))
func unique(arr:[Int])->[Int]{
var数组=arr
var uniqueSet=Set()
对于0中的i..
您的主要问题是在数组中循环时插入和删除,这将使它崩溃或永远循环

没必要,你可以

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
}

仅供参考-这是使用调试器的好机会。逐行检查代码,查看崩溃时
i
的值和
array
的值。想想在循环过程中发生了什么。