16

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

例子:

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

新列表应该是 - 1,2,3,4

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

期待一些帮助....

史蒂文

4

4 回答 4

28

为什么不使用List.RemoveRange

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

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

于 2012-05-10T09:40:06.010 回答
11

或者,您可以创建一个包含旧项目的新列表:

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

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

或者,如果您需要做的只是迭代它们,只需Take不在ToLista 内foreach

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

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

顺便说一句,使用 linq 和 linq 扩展,我发现代码更明确地声明了您的意图list.Take(4):读起来比list.RemoveRange(4, list.Count - 4);一目了然容易得多。代码中的意图对于维护和团队工作非常重要。

于 2012-05-10T09:40:20.583 回答
1

尝试这个

  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();
于 2012-05-10T09:50:06.233 回答
0

使用LINQ

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

这将获取列表的前 4 项,并分配一个新列表来代替旧列表。

无需像其他答案那样检查长度,因为“Take 枚举源并产生元素,直到产生计数元素或源不包含更多元素。” 亚当霍尔兹沃斯提供

于 2012-05-10T09:46:44.943 回答