有没有办法按值Array
删除元素?例如,如何从此数组中删除"remove me"
?
var stuff: [String] = ["remove me", "dont remvoe me"]
答案 0 :(得分:2)
您可以像这样使用find
:
var stuff: [String] = ["remove me", "dont remvoe me"]
if let idx = find(stuff, "remove me") {
stuff.removeAtIndex(idx)
}
stuff
答案 1 :(得分:1)
您可以执行filter
操作
let newstuff = stuff.filter { $0 != "remove me"}
答案 2 :(得分:1)
Logan的回答不再适用于Swift,而是使用它:
var stuff: [String] = ["remove me", "dont remove me"]
if let idx = stuff.indexOf("remove me") {
stuff.removeAtIndex(idx)
}
适合我:)
根据文档,indexOf:“返回第一个索引,其中值出现在self或nil,如果找不到值。”
答案 3 :(得分:0)
如果要删除所有元素,而不是创建通过过滤获得的新数组(如@rakeshbs的答案),则必须找到要删除的元素的索引:
let elements = filter(enumerate(stuff)) { $0.element == "remove me" }
然后使用foreach循环删除所有这些:
for element in elements {
stuff.removeAtIndex(element.index)
}
此解决方案会删除与过滤器匹配的所有元素,因此在数组可能包含重复项时非常有用。如果您确定没有重复项,也可以使用@ Logan的解决方案。
请注意,enumerate
会返回一系列(index, element)
元组。
答案 4 :(得分:0)
这是一个应该这样做的功能:
func removeOccurencesOf<T: Equatable>(element: T, inout inArray array: [T]) {
for index in lazy(0..<array.count).reverse() {
if array[index] == element {
array.removeAtIndex(index)
}
}
}
var stuff = ["remove me", "don't remove me"]
removeOccurencesOf("remove me", inArray: &stuff)
println(stuff)
// prints "[don't remove me]"