如何从多个匹配对象中删除数组中的单个对象

var testarray = NSArray() testarray = [1,2,2,3,4,5,3] print(testarray) testarray.removeObject(2) 

我想从多个匹配对象中删除单个对象

 myArray = [1,2,2,3,4,3] 

当我删除

 myArray.removeObject(2) 

那么两个对象都被删除。 我只想删除单个对象。

我试图使用很多扩展,但没有人正常工作。 我已经使用这个链接 。

Swift 2

使用简单的Swift数组时的解决scheme:

 var myArray = [1, 2, 2, 3, 4, 3] if let index = myArray.indexOf(2) { myArray.removeAtIndex(index) } 

这是因为.indexOf只返回find的对象的第一次出现,作为一个可选的(如果没有find对象,它将是nil )。

如果你使用NSMutableArray,它会有点不同:

 let nsarr = NSMutableArray(array: [1, 2, 2, 3, 4, 3]) let index = nsarr.indexOfObject(2) if index < Int.max { nsarr.removeObjectAtIndex(index) } 

这里.indexOfObject将无法在此索引处find对象时返回Int.max ,因此我们在删除对象之前检查此特定错误。

Swift 3

语法已经改变,但想法是一样的。

阵:

 var myArray = [1, 2, 2, 3, 4, 3] if let index = myArray.index(of: 2) { myArray.remove(at: index) } myArray // [1, 2, 3, 4, 3] 

NSMutableArray中:

 let myArray = NSMutableArray(array: [1, 2, 2, 3, 4, 3]) let index = myArray.index(of: 2) if index < Int.max { myArray.removeObject(at: index) } myArray // [1, 2, 3, 4, 3] 

在Swift 3中,我们在Array和NSMutableArray上调用了index(of:) ,但是对于不同的集合types,它们的行为也不同,比如Swift 2中的indexOfindexOfObject

如果你想删除所有重复的对象,那么你可以使用下面的代码。

  var testarray = NSArray() testarray = [1,2,2,3,4,5,3] let set = NSSet(array: testarray as [AnyObject]) print(set.allObjects)