C# - 列表 - 删除所有元素,但不删除前四个元素
本文关键字:删除 元素 四个 列表 | 更新日期: 2023-09-27 18:33:55
我有一个元素列表,但是如果列表元素的数量大于 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);
}
(这是假设您要更改现有列表。如果您愿意创建一个新序列,我肯定会按照亚当的建议使用list.Take(4)
,无论是否使用ToList
调用。如今,我倾向于构建查询,而不是改变现有集合。
或者,您可以使用旧列表中的项目创建一个新列表:
var firstFour = myList.Take(4).ToList();
但是,这将创建一个新列表,因此与从原始列表中删除不同。
或者,如果您需要做的就是迭代它们,只需Take
而无需在foreach
内ToList
:
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 枚举源并生成元素,直到生成计数元素或源不包含更多元素。