C# – 列表 – 删除所有元素,但不删除前四个元素
我有一个元素列表,但是如果列表元素的数量大于4,我想删除所有元素,但只留下列表中的前4个元素。
例:
列表 – 1,2,3,4,5,6,7,8
新名单应为 – 1,2,3,4
我正在寻找使用List.RemoveAll()但不确定要放在括号中的内容
期待一些帮助……
史蒂芬
为什么不使用List.RemoveRange
:
if (list.Count > 4) { list.RemoveRange(4, list.Count - 4); }
(假设你想改变现有的列表。如果你很乐意创建一个新序列,我肯定会按照Adam的建议使用list.Take(4)
,无论有没有ToList
调用。这些天我倾向于构建查询而不是改变现有的集合。)
或者,您可以使用旧项目创建新列表:
var firstFour = myList.Take(4).ToList();
但是,这会创建一个新列表,因此与从原始列表中删除不同。
或者,如果你需要做的就是迭代它们,只需在foreach
Take
without ToList
:
foreach (var item in myList.Take(4))
然后,您将获得延迟执行,并且不会在创建列表上花费内存。
正如旁注,使用linq和linq扩展,我发现代码更明确地声明了你的意图 : list.Take(4)
比list.RemoveRange(4, list.Count - 4);
更容易读取list.RemoveRange(4, list.Count - 4);
乍看上去。 代码中的意图对于维护和团队合作非常重要。
试试这个
List lstTest = new List (); 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();
使用Take of LINQ。
myList = myList.Take(4).ToList()
这会占用您列表中的前4项,并指定一个新列表来代替旧列表。
不需要像在其他答案中那样检查长度,因为“在计数元素已经产生或源不包含更多元素之前,需要枚举源和产生元素”。 Adam Houldsworth提供