C# - 列表 - 删除所有元素,但不删除前四个元素

本文关键字:删除 元素 四个 列表 | 更新日期: 2023-09-27 18:33:55

我有一个元素列表,但是如果列表元素的数量大于 4,我想删除所有元素,但只在列表中保留前 4 个。

例:

列表<> - 1, 2, 3, 4, 5, 6, 7, 8

新列表应为 - 1,2,3,4

我正在考虑使用List.RemoveAll(),但不确定在括号中放什么

期待一些帮助....

史蒂文

C# - 列表 - 删除所有元素,但不删除前四个元素

为什么不使用List.RemoveRange

if (list.Count > 4)
{
    list.RemoveRange(4, list.Count - 4);
}

(这是假设您要更改现有列表。如果您愿意创建一个新序列,我肯定会按照亚当的建议使用list.Take(4),无论是否使用ToList调用。如今,我倾向于构建查询,而不是改变现有集合。

或者,您可以使用旧列表中的项目创建一个新列表:

var firstFour = myList.Take(4).ToList();

但是,这将创建一个列表,因此与从原始列表中删除不同。

或者,如果您需要做的就是迭代它们,只需Take而无需在foreachToList

foreach (var item in myList.Take(4))

然后,您将获得延迟执行,并且不会在创建列表上花费内存。

作为旁注,对于 linq 和 linq 扩展,我发现代码更明确地声明了您的意图list.Take(4)比一目了然list.RemoveRange(4, list.Count - 4);容易得多。代码中的意图对于维护和团队合作非常重要。

试试这个

  List<string> lstTest = new List<string>();
            lstTest.Add("test1");
            lstTest.Add("test2");
            lstTest.Add("test3");
            lstTest.Add("test4");
            lstTest.Add("test5");
            lstTest.Add("test6");           
            lstTest.RemoveRange(4, lstTest.Count - 4);
            foreach (string item in lstTest)
            {
                Console.Write(item);
            }
            Console.ReadLine();

使用 LINQ。

myList = myList.Take(4).ToList()

这将占用列表中的前 4 个项目,并分配一个新列表来代替旧列表。

无需像其他答案那样检查长度,因为"Take 枚举源并生成元素,直到生成计数元素或源不包含更多元素。