我想从一个包含x、y和z元素的数组中删除所有值为x的元素
let arr = ['a', 'b', 'c', 'b']
我该如何从arr中删除所有值为'b'的元素?
我想从一个包含x、y和z元素的数组中删除所有值为x的元素
let arr = ['a', 'b', 'c', 'b']
我该如何从arr中删除所有值为'b'的元素?
let farray = arr.filter {$0 != "b"}
如果您需要修改初始数组,则可以使用在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的一些新功能的实现)。
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。
filter
从未更快https://gist.github.com/getaaron/11b751b15489b0b95e9e - Aaron Bragercontains
和 index(of:)
。只使用 index(of)
会更快,因为它返回一个可选值。 - Leo Dabus根据评论修改内容:
我喜欢这种方法:
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)
}
if
替换为while
。 - Martin Rarr = arr.filter { $0 != "a" }
.filter、.sort 和 .map 可以省时,并且用很少的代码解决很多问题。
这篇文章有很好的示例,解释了它们之间的差异以及它们的工作方式:https://useyourloaf.com/blog/swift-guide-to-map-filter-reduce/
var mainArray = ["a", "b", "qw", "qe"]
let thingsToRemoveArray = ["qw", "b"]
for k in thingsToRemoveArray {
mainArray = mainArray.filter {$0 != k}
}
let avoidJustin = notEqualTester ("Justin")
let arrayOfUsers = // ...
arrayOfUsers.filter (avoidJustin)
let arrayOfFriends = // ...
arrayOfFriends.filter (avoidJustin)
notEqualTester
的示例,它会给定一个 that
,返回一个函数,该函数返回 this != that
。func notEqualTester<T: Equatable> (that:T) -> ((this:T) -> Bool) {
return { (this:T) -> Bool in return this != that }
}
this
的返回闭包会捕获 that
的值 - 当 that
不再可用时,这非常有用。
arr.remove(at: arr.index(of: ‘b’))
'
,而需要使用"
。因此,答案将是let something = arr.filter{$0 != "b"}
。 - Marco Dinatsoli