.net 当一个项目被删除时,从一个重新索引的列表中删除项目的最佳算法是什么?

11dmarpk  于 2023-05-23  发布在  .NET
关注(0)|答案(2)|浏览(276)

我正在处理一个可能很常见的情况,我甚至不知道如何在搜索中制定。
我决定寻求指导,不一定要得到任何代码,但要问什么是这种情况下的最佳方法。
我有一个名为arrIntIndexesOfJobsThatWillBeKilled的列表,其中包含必须从另外5个列表中删除的项目的原始索引。
但是,当我从其他5个列表中删除一个项目时,它们会被重新索引,并且我曾经在arrIntIndexesOfJobsThatWillBeKilled中拥有的索引现在无效了。
我只想删除链接到原始索引的项...
处理这种情况的最佳算法是什么?

arrIntIndexesOfJobsThatWillBeKilled = arrIntIndexesOfJobsThatWillBeKilled.Distinct.ToList

If arrIntIndexesOfJobsThatWillBeKilled.Count > 0 Then

    For Each Job As Integer In arrIntIndexesOfJobsThatWillBeKilled

        arrStrJobDescription2.RemoveAt(Job)
        arrStrPNDirectories2.RemoveAt(Job)
        arrIntJobIDDirectories2.RemoveAt(Job)
        arrStrSubDirectories2.RemoveAt(Job)
        arrStrNCFile2.RemoveAt(Job)

    Next

End If
py49o6xq

py49o6xq1#

您可以将删除顺序更改为反向-首先删除较大的索引。不熟悉VB,但在C#中看起来像:

arrIntIndexesOfJobsThatWillBeKilled = arrIntIndexesOfJobsThatWillBeKilled
    .OrderByDescending(i => i) // assuming list of integers here, or .OrderDescending() for later framework
    .Distinct()
    .ToList();

然后继续删除。
P.S.
If arrIntIndexesOfJobsThatWillBeKilled.Count > 0 Then检查是多余的-foreach可以很好地处理空集合。

9o685dep

9o685dep2#

在这里的合作者的指导下,这是工作的代码:

If arrIntIndexesOfJobsThatWillBeKilled.Count > 0 Then

arrIntIndexesOfJobsThatWillBeKilled = arrIntIndexesOfJobsThatWillBeKilled.OrderByDescending(Function(i) i).Distinct.ToList

   For Each Job As Integer In arrIntIndexesOfJobsThatWillBeKilled

       arrStrJobDescription2.RemoveAt(Job)
       arrStrPNDirectories2.RemoveAt(Job)
       arrIntJobIDDirectories2.RemoveAt(Job)
       arrStrSubDirectories2.RemoveAt(Job)
       arrStrNCFile2.RemoveAt(Job)

   Next

End If

非常感谢再次教育这个平庸的编码器...

相关问题