【发布时间】:2021-03-02 03:55:40
【问题描述】:
我有一个字典数组和另一个数组,其中包含需要从第一个数组中删除的索引。我尝试将它们设为 IndexSet 并使用 removeObjects(at: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)
日志打印: 111 24 87 但问题是 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}"
)
有什么建议吗?提前致谢
【问题讨论】:
-
你能说明
listArray和listToBeRemoved是什么吗?这将使调试更容易 -
let indices = listToBeRemoved.map{ $0.row }.sorted(); indices.reversed().forEach{ listArray.remove(at: $0) }? -
@aheze 编辑了我的问题。谢谢
-
@Larme 之前已经尝试过...似乎破坏了我的字典并且仍然产生多个相同的对象
-
它不应该破坏任何东西。但是
listToBeRemoved是否包含重复值。如果是这样,则需要使用let indices = Array(Set(listToBeRemoved.map{ $0.row })).sorted()进行修复。