【问题标题】:delete item in a list c#删除列表中的项目c#
【发布时间】:2017-03-14 22:26:05
【问题描述】:

我需要一点帮助。我的项目中有 2 个列表:1 个有 5,000 个项目,listA,另一个有 10,000 个项目,listB。我正在使用for loop 阅读列表:

for(int j = 5000 - 1; j > 0; j--)

我需要删除listA 中的最后一项,而listB 中我需要删除最后2 项。这个过程是必要的,因为我需要优化我的软件中的内存。

非常感谢任何帮助谢谢

我尝试过这样做,但它不起作用:

listA.RemoveAt(j);
listB.RemoveAt(9999 - i + 1);
listB.RemoveAt(9999 - i );

【问题讨论】:

  • 你的意思可能是9999 - (i + 1),或者9999 - i - 1
  • 如果您只是从列表中删除项目,为什么需要迭代它们?
  • 顺便说一句,您目前正在阅读的项目太少 - 您需要 j >= 0 进行反向循环
  • 在这种情况下您是否必须明确使用 for 循环(例如家庭作业)?因为有更简单的方法来做你想做的事。
  • 可能想清理有问题的 ij 的歧义

标签: c# linq list memory-management


【解决方案1】:

要删除最后一个项目

listA.RemoveAt(listA.Count - 1)

对于最后两项,只需执行两次。您应该检查计数是否已经为 0,否则会出现异常。

【讨论】:

    【解决方案2】:

    因为j 似乎总是等于listA 中最后一项的索引,所以2 * j + 1 总是等于listB 中最后一项的索引。所以你可以使用RemoveAt / RemoveRange:

    listA.RemoveAt(j);
    listB.RemoveRange(2 * j, 2);
    

    此外,如果内存管理是一个大问题,您可能需要考虑在一段时间后通过设置 Capacity 来缩小列表(请注意,这可能会影响性能,因此您应该避免过于急切地这样做)。

    listA.Capacity = j;
    listB.Capacity = 2 * j;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      相关资源
      最近更新 更多