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

Raf*_*ffi 14 xcode swift swift2 swift3

例如,我有一个数组

var array = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我想删除索引1处的项目,然后在索引3处"将其置于for循环中".

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

有什么建议 ?

Luc*_*tti 25

鉴于你的阵列

var numbers = [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

和一个Set要删除的索引

let indexesToRemove: Set = [1, 3]
Run Code Online (Sandbox Code Playgroud)

您想要删除值"2"和"4".

写吧

numbers = numbers
    .enumerated()
    .filter { !indexesToRemove.contains($0.offset) }
    .map { $0.element }
Run Code Online (Sandbox Code Playgroud)

结果

print(numbers) // [1, 3]
Run Code Online (Sandbox Code Playgroud)

  • 链接`filter`和`map`的替代方法是使用单个`flatMap`,例如`... .enumerate().flatMap {indexesToRemove.contains($ 0)?nil:$ 1}`(同样的语法Swift 2.2/3.0). (3认同)

Sei*_*ahi 9

这很简单.从最后删除项目.

首先删除3,然后删除1

  • @Raffi当你更改数据源(数组)时,你还在桌面上`reloadData`吗?该表需要知道行计数现在是不同的. (5认同)