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

时间:2014-06-07 01:14:56

标签: swift

我想从包含x,y和z元素

的数组中删除值x的所有元素
let arr = ['a', 'b', 'c', 'b']

如何删除所有有价值的元素' b'来自arr?

7 个答案:

答案 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时重复创建一个闭包。以下为notEqualTesterthat,返回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}
          }