我想从包含x,y和z元素
的数组中删除值x的所有元素let arr = ['a', 'b', 'c', 'b']
如何删除所有有价值的元素' b'来自arr?
答案 0 :(得分:105)
过滤器:
let farray = arr.filter {$0 != "b"}
答案 1 :(得分:13)
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)
适用于Swift 3.0。
答案 2 :(得分:4)
已编辑根据评论:
我喜欢这种方法:
var arr = ["a", "b", "c", "b"]
while let idx = arr.index(of:"b") {
arr.remove(at: idx)
}
原始答案(编辑前):
let arr = ['a', 'b', 'c', 'b']
if let idx = arr.index(of:"b") {
arr.remove(at: idx)
}
答案 3 :(得分:2)
在 Swift 3 中,我只是这样做:
arr = arr.filter { $0 != "a" }
.filter,.sort和.map非常适合节省时间并用很少的代码解决许多问题。
本文有很好的例子,并解释了它们之间的差异及其工作原理:https://useyourloaf.com/blog/swift-guide-to-map-filter-reduce/
答案 4 :(得分:2)
如果需要修改初始数组,可以使用Swift 4.2 / Xcode 10中可用的函数removeAll(where:)
:
var arr = ["a", "b", "c", "b"]
arr.removeAll(where: { $0 == "b" })
print(arr) // output is ["a", "c"]
但是,如果您使用的是Xcode 9,则可以在Xcode9to10Preparation中找到此功能(该库提供了Xcode 10中一些新功能的实现)。
答案 5 :(得分:1)
一般方法是利用头等程序。 (但是,这种方法很多比你的问题所需要的更强大。)为了说明,你想要反复避免" Justin" 许多收藏品。
let avoidJustin = notEqualTester ("Justin")
let arrayOfUsers = // ...
arrayOfUsers.filter (avoidJustin)
let arrayOfFriends = // ...
arrayOfFriends.filter (avoidJustin)
有了这个,你可以避免每次想要避免Justin时重复创建一个闭包。以下为notEqualTester
,that
,返回this
的函数,返回this != that
。
func notEqualTester<T: Equatable> (that:T) -> ((this:T) -> Bool) {
return { (this:T) -> Bool in return this != that }
}
this
返回的闭包会抓取 that
的值 - 这在that
不再可用时非常有用。
答案 6 :(得分:1)
如果要删除多个元素,则要感谢第一个答案。
var mainArray = ["a", "b", "qw", "qe"]
let thingsToRemoveArray = ["qw", "b"]
for k in thingsToRemoveArray {
mainArray = mainArray.filter {$0 != k}
}