如何从 swift 数组中删除多个项目?

问题描述 投票:0回答:4

例如我有一个数组

var array = [1, 2, 3, 4]

我想删除索引 1 处的项目,然后删除索引 3 处的项目“让它处于 for 循环中”。

但是删除索引 1 处的项目会将索引 3 处的项目移动到索引 2,从而搞乱第二次删除。

有什么建议吗?

swift xcode swift3 swift2
4个回答
36
投票

给定你的数组

var numbers = [1, 2, 3, 4]

以及您要删除的

Set
索引

let indexesToRemove: Set = [1, 3]

您想要删除值“2”和“4”。

就写吧

numbers = numbers
    .enumerated()
    .filter { !indexesToRemove.contains($0.offset) }
    .map { $0.element }

结果

print(numbers) // [1, 3]

12
投票

很简单。从末尾删除项目。

先删除3个,然后删除1个


1
投票

Swift 3: 使用 swift 闭包执行相同的操作。

如果你的数组是这样的

var numbers = [0, 1, 2, 3, 4, 5]

以及您要删除的索引

let indexesToBeRemoved: Set = [2, 4]

numbers = numbers
    .enumerated()
    .filter { !indexesToRemove.contains($0.offset) }
    .map { $0.element }
and result

print(数字) // [0, 1, 3, 5]

斯威夫特3: 这是与 JSON 对象(字典)相同的操作

var arrayString = [
    [ "char" : "Z" ],
    [ "char" : "Y" ],
    [ "char" : "X" ],
    [ "char" : "W" ],
    [ "char" : "V" ],
    [ "char" : "U" ],
    [ "char" : "T" ],
    [ "char" : "S" ]
]

let arrayIndex = [2, 3, 5]

arrayString = arrayString.enumerated()
    .filter { !arrayIndex.contains($0.0 + 1) }
    .map { $0.1 }

print(arrayString)

[[“字符”:“Z”],[“字符”:“W”],[“字符”:“U”],[“名称”:“T”],[“名称”: “S”]]


0
投票

我认为最简单的方法就是从后面移除。所以你不用担心索引改变了。

var numbers = [1, 2, 3, 4, 5]
let indexesToRemove = [1, 3]
indexesToRemove.sort(by: >)
for i in indexesToRemove {
    numbers.remove(at:i)
}
© www.soinside.com 2019 - 2024. All rights reserved.