【问题标题】:Remove List items given a list of indices [duplicate]删除给定索引列表的列表项[重复]
【发布时间】:2015-12-04 00:15:44
【问题描述】:

我有一个List,即[0.1, 0.3, 0.8, 0.3, 0.4, 0.7, 0.9, 0.5]。如何通过提供要从原始列表中删除的索引列表来执行RemoveRange,即[0, 4, 2, 7, 8]?。

List(T).RemoveRange 在我的情况下不能工作,因为它被定义为

public void RemoveRange(int index, int count)

我也不希望使用for 循环并反复检查列表。还有其他方法吗?

【问题讨论】:

  • 这些指数有什么共同点吗?
  • 不是真的...只是列出
  • 为什么没有 for 循环,你有什么尝试?无论如何,请参阅Remove list elements at given indices
  • 索引列表是否无序(正如您的问题所建议的那样)?
  • 对否决票的任何解释,或者只是一个不加解释地投反对票的习惯?

标签: c# list


【解决方案1】:

您可以使用 LINQ 的 Enumerable.Where 来保留所有不在索引列表中的内容:

list = list.Where((d, index) => !indices.Contains(index)).ToList();

另一种“不太优雅”的方法是使用向后循环和List.RemoveAt

indices.Sort();
for (int i = indices.Count - 1; i >= 0; i--)
    list.RemoveAt(indices[i]);

【讨论】:

  • @CodeCaster:现在更好了,我的第一种方法是向后循环整个集合,而不仅仅是索引列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多