我有一个字典数组和另一个数组,其中包含需要从第一个数组中删除的索引。我尝试将它们设置为IndexSet并使用removeObjects(位于:indexes:IndexSet(,但失败了。有人知道怎么做吗?
print(listArray.count)
print(listToBeRemoved.count)`
let set = NSMutableIndexSet()
for (idx, index) in listToBeRemoved.enumerated(){
set.add((index as! NSIndexPath).row)
if idx == listToBeRemoved.count-1{
listArray.removeObjects(at: set as IndexSet)
}
print(listArray.count)
日志打印:1112487但问题是listArray在其所有索引中都包含相同的对象。在删除对象之前,所有对象都是不同的。
ListArray是一个字典数组,其中字典有4个关键字:
{
Date = Date();
Source = String;
Title = String;
Url = String;
}
而listToBeRemoved是IndexPaths的数组,例如:
(
"<NSIndexPath: 0xf7e2dd0ccbb6f985> {length = 2, path = 0 - 63}",
"<NSIndexPath: 0xf7e2dd0cc916f985> {length = 2, path = 0 - 42}",
"<NSIndexPath: 0xf7e2dd0cc936f985> {length = 2, path = 0 - 43}",
"<NSIndexPath: 0xf7e2dd0cc9b6f985> {length = 2, path = 0 - 47}",
"<NSIndexPath: 0xf7e2dd0cca56f985> {length = 2, path = 0 - 48}"
)
有什么建议吗?提前感谢
您可以做什么:
- 获取所有索引
- 按降序排序
- 遍历索引,并删除该索引处的项
为什么要反转?因为否则,假设您有索引[0,1],并且您的数组是[A,B,C]如果您开始在索引上循环,您将获得:0:首先从[A,B,C]->[B,C]1:从[B,C]->[B]
因此,如果您使用Swift Array:
let indices = listToBeRemoved.map{ $0.row }.sorted()
indices.reversed().forEach{ listArray.remove(at: $0) }
由于您使用的是NSMutableArray(我强烈建议您在Stuff可用时避免NSStuff(:listArray.remove(at: $0)
是listArray.removeObject(at: $0)
另一种可能的解决方案:
let indices = IndexSet(listToBeRemoved.map{ $0.row })
listArray.removeObjects(at: indices) //Objective-C
listArray.remove(attOffsets: indices) //Swift