从Swift 5中的Array中移除特定索引处的对象



我有一个字典数组和另一个数组,其中包含需要从第一个数组中删除的索引。我尝试将它们设置为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

相关内容

  • 没有找到相关文章

最新更新