如果索引是连续的使用removeSubrange
方法是可能的。例如,如果您想删除索引 3 到 5 处的项目:
myArray.removeSubrange(ClosedRange(uncheckedBounds: (lower: 3, upper: 5)))
对于非连续索引,我建议将索引较大的项目删除为较小的项目。除了代码可以更短之外,我可以想到在单行中“同时”删除项目没有任何好处。您可以使用扩展方法来做到这一点:
extension Array {
mutating func remove(at indexes: [Int]) {
for index in indexes.sorted(by: >) {
remove(at: index)
}
}
}
然后:
myArray.remove(at: [3, 5, 8, 12])
更新:使用上面的解决方案,您需要确保索引数组不包含重复的索引。或者您可以避免重复如下:
extension Array {
mutating func remove(at indexes: [Int]) {
var lastIndex: Int? = nil
for index in indexes.sorted(by: >) {
guard lastIndex != index else {
continue
}
remove(at: index)
lastIndex = index
}
}
}
var myArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
myArray.remove(at: [5, 3, 5, 12]) // duplicated index 5
// result: [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 13] only 3 elements are removed