删除特定的数组元素,等于string – Swift

有没有简单的方法从数组中删除特定的元素,如果它等于给定的string? 解决方法是find要删除的数组元素的索引,然后removeAtIndex ,或者创build一个新的数组,添加与给定string不相同的所有元素。 但是没有更快的方法吗?

你可以使用filter()来过滤你的数组

 var myArrayOfStrings = ["Hello","Playground","World"] myArrayOfStrings = myArrayOfStrings.filter{$0 != "Hello"} print(myArrayOfStrings) // "[Playground, World]" 

在执行时间或代码量方面,您是否更快意味着不清楚。

在后一种情况下,您可以使用filter方法轻松创build副本。 例如,给定以下数组:

 let array = ["1", "2", "3", "4", "5"] 

您可以使用除“2”之外的所有元素创build副本,如下所示:

 let filteredArray = array.filter { $0 != "2" } 

你会想使用filter() 。 如果你有一个元素(称为obj )来移除,那么filter()谓词将是{ $0 != obj } 。 如果您为大型数组重复执行此操作,则可能是性能问题。 如果您可以推迟删除单个对象,并希望删除整个子数组,然后使用如下所示:

 var stringsToRemove : [String] = ... var strings : [String] = ... strings.filter { !contains(stringsToRemove, $0) } 

例如:

  1> ["a", "b", "c", "d"].filter { !contains(["b", "c"], $0) } $R5: [String] = 2 values { [0] = "a" [1] = "d" } 

您可以将filter()与运算符重载组合使用,以生成一个易于重复的解决scheme

 func -= (inout left: [String], right: String){ left = left.filter{$0 != right} } var myArrayOfStrings:[String] = ["Hello","Playground","World"] myArrayOfStrings -= "Hello" print(myArrayOfStrings) // "[Playground, World]" 

如果你需要从数组中删除subArray,那么这是一个完美的解决scheme,使用Swift3

 var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"] let subArrayToDelete = ["c", "d", "e", "ee"] array = array.filter{ !subArrayToDelete.contains($0) } print(array) // ["a", "b", "f", "g", "h", "i", "j"] 

这对你的performance更好,而不是逐个删除。

顺便说一句, 更快的解决scheme是(但它会重新排列在最后一个数组中的项目):

 array = Array(Set(array).subtracting(subArrayToDelete)) 

使用像上面提到的filter是很好的。 但是如果你只想删除一个值,或者你认为在数组中没有重复,并且你想要一个更快的algorithm,可以使用(在Swift3中):

 if let index = array.index(of: "stringToRemove") { array = array.remove(at: index) } else { // not found }