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

时间:2012-05-10 09:38:37

标签: c# list

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

示例:

列表与LT;> - 1,2,3,4,5,6,7,8

新名单应为 - 1,2,3,4

我正在寻找使用List.RemoveAll()但不确定要放在括号中的内容

期待一些帮助......

史蒂芬

4 个答案:

答案 0 :(得分:19)

为什么不使用List.RemoveRange

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

(假设你希望改变现有列表。如果你很乐意创建一个新序列,我肯定会根据Adam的建议使用list.Take(4),无论是否有ToList调用。这些天我倾向于构建查询而不是改变现有的集合。)

答案 1 :(得分:9)

或者,您可以使用旧版本的项目创建新列表:

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

这会创建一个 new 列表,但 与从原始列表中删除相同。

或者如果您需要做的只是迭代,只需在TakeToList foreach而不是foreach (var item in myList.Take(4))

list.Take(4)

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

正如附注,使用linq和linq扩展,我发现代码更明确地声明了您的 intent list.RemoveRange(4, list.Count - 4);一目了然,比{{1}}读取容易得多。代码中的意图对于维护和团队合作非常重要。

答案 2 :(得分:0)

使用LINQ的Take

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

这会占用您列表的前4项,并指定一个新列表来代替您的旧列表。

不需要像在其他答案中一样检查长度,因为“在枚举元素产生之前枚举源和产生元素,或者源代码不再包含元素。”礼貌Adam Houldsworth

答案 3 :(得分:0)

试试这个

  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();