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

时间:2016-01-25 11:11:20

标签: ios arrays swift

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) 

然后删除两个对象。我想只删除单个对象。

我尝试使用多个扩展但没有人正常工作。我已经使用过this link

2 个答案:

答案 0 :(得分:7)

Swift 2

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

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

if let index = myArray.indexOf(2) {
    myArray.removeAtIndex(index)
}

它有效,因为.indexOf仅返回找到的对象的第一次出现,作为可选项(如果找不到对象,它将为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将返回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:),但它们对于不同的集合类型仍然表现不同,例如indexOfindexOfObject在Swift 2中的行为。

答案 1 :(得分:-1)

如果要删除所有重复的对象,则可以使用以下代码。

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

    let set = NSSet(array: testarray as [AnyObject])
    print(set.allObjects)