如何从Swift中的数组中删除给定值的元素

Enc*_*PTL 44 swift

我想从包含x,y和z元素的数组中删除值x的所有元素

let arr = ['a', 'b', 'c', 'b']
Run Code Online (Sandbox Code Playgroud)

如何从arr中删除值'b'的所有元素?

ilu*_*pra 113

过滤器:

 let farray = arr.filter {$0 != "b"} 
Run Code Online (Sandbox Code Playgroud)

  • 她/他的意思是括号,而不是括号 (4认同)
  • 你甚至不需要大括号,因为它是一个尾随的闭包:) arr = arr.filter {$ 0!='b'} <3 swift (3认同)
  • 对于 swift 2,你不能使用 `'`,你需要使用 `"` 。所以答案将是 `let some = arr.filter{$0 != "b"}` (2认同)

Nit*_*sjp 14

var array : [String]
array = ["one","two","one"]

let itemToRemove = "one"

while array.contains(itemToRemove) {
    if let itemToRemoveIndex = array.index(of: itemToRemove) {
        array.remove(at: itemToRemoveIndex)
    }
}

print(array)
Run Code Online (Sandbox Code Playgroud)

适用于Swift 3.0.


Rom*_*mov 9

如果需要修改初始数组,可以使用removeAll(where:)Swift 4.2/Xcode 10 中提供的函数:

var arr = ["a", "b", "c", "b"]
arr.removeAll(where: { $0 == "b" })
print(arr) // output is ["a", "c"]
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用的是 Xcode 9,则可以在Xcode9to10Preparation 中找到此函数(该库提供了 Xcode 10 中一些新函数的实现)。


Jen*_*ens 5

根据评论编辑

我喜欢这种方法:

var arr = ["a", "b", "c", "b"]

while let idx = arr.index(of:"b") {
    arr.remove(at: idx)
}
Run Code Online (Sandbox Code Playgroud)

原始答案(编辑前):

let arr = ['a', 'b', 'c', 'b']

if let idx = arr.index(of:"b") {
    arr.remove(at: idx)
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将仅删除等于 'b' 的 *first* 数组元素。要删除*所有*(根据本问题的要求),请将“if”替换为“while”。 (2认同)