通过值Swift语言从数组中删除元素

时间:2015-02-04 16:40:11

标签: arrays swift

有没有办法按值Array删除元素?例如,如何从此数组中删除"remove me"

var stuff: [String] = ["remove me", "dont remvoe me"]

5 个答案:

答案 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]"