如何从多个匹配对象中删除数组中的单个对象
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中的indexOf
和indexOfObject
。
如果你想删除所有重复的对象,那么你可以使用下面的代码。
var testarray = NSArray() testarray = [1,2,2,3,4,5,3] let set = NSSet(array: testarray as [AnyObject]) print(set.allObjects)