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

ikb*_*bal 2 arrays ios swift

var testarray = NSArray() 
testarray = [1,2,2,3,4,5,3] 
print(testarray) 
testarray.removeObject(2)
Run Code Online (Sandbox Code Playgroud)

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

myArray = [1,2,2,3,4,3]
Run Code Online (Sandbox Code Playgroud)

当我删除

myArray.removeObject(2) 
Run Code Online (Sandbox Code Playgroud)

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

我尝试使用许多扩展但没有人正常工作.我已经使用过此链接.

aya*_*aio 7

斯威夫特2

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

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

if let index = myArray.indexOf(2) {
    myArray.removeAtIndex(index)
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为.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)
}
Run Code Online (Sandbox Code Playgroud)

如果未能在此索引处找到对象,.indexOfObject则返回此处Int.max,因此我们会在删除对象之前检查此特定错误.

斯威夫特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]
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

在斯威夫特3,我们呼吁index(of:)双方阵和NSMutableArray里,但他们仍然表现不同为不同的集合类型,像indexOfindexOfObject斯威夫特2一样.