【问题标题】:Remove all but the first item in a list删除列表中除第一项以外的所有内容
【发布时间】:2013-02-07 16:47:53
【问题描述】:

让我们考虑如下列表

列表包含的值为a,b,c,d....

我需要一个查询来删除列表中除“a”之外的所有值。

【问题讨论】:

  • 为什么不创建一个包含 a 的新列表?
  • 您需要查询什么? sql?
  • Use First() 不适合您?
  • @DanielKelley 还有其他方法吗?
  • list.RemoveRange(index, count);是一个选项,如果您已经对列表进行了排序。或者带有适当谓词的 list.RemoveAll() 可以为您工作。

标签: c# .net list


【解决方案1】:

List.RemoveRange 就是你要找的东西:

if(list.Count > 1)
    list.RemoveRange(1, list.Count - 1);

Demo

【讨论】:

  • 如果它不是列表中的第一个元素怎么办?
  • @AbdusalamBenHaj:OP 想要删除除第一个以外的所有内容,所以这个问题是题外话。也许你想要:string item="a"; list.RemoveAll(i=> !object.ReferenceEquals(i, item));
  • 这很晚,但认为应该是 list.count 而不是 list.count-1
  • @mj1261829:为什么? OP 想删除除第一个以外的所有项目。由于List<T>.RemoveRange中的第二个参数是计数,我们从第二个项目开始,它必须是list.Count - 1,否则我们得到一个ArgumentException
【解决方案2】:
List<T> elements = ....

elements.RemoveAll(x => x != a)

UPD

如 Tim Schmelter 所说,除了首先要删除之外,您需要使用 RemoveRange。

或用第一个元素创建新列表。 元素.First()

【讨论】:

  • a is unknow 意味着我应该怎么做?
  • “a 未知”是什么意思?您可以将其保存在变量中并将其传递给此查询。
  • 如果 a 现在未知并且您需要“删除列表中除“a”之外的所有值”。你需要找个地方
  • 看标题,他要删除除第一个之外的所有内容,而不是除a之外的所有内容。
  • 如果这是你的家庭任务,你需要用循环和 if 条件编写你的 RemoveAll
猜你喜欢
  • 2012-12-03
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2011-01-16
  • 2012-07-08
相关资源
最近更新 更多