如何在C#中截断列表?

Ris*_*shi 16 c# truncate list

我知道在python中你可以做类似的东西myList[1:20]但C#中有类似的东西吗?

Tim*_*son 36

var itemsOneThroughTwenty = myList.Take(20);
var itemsFiveThroughTwenty = myList.Skip(5).Take(15);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这些Linq扩展实际上创建了一个IEnumerable <>,它在N个项之后停止,而不是创建一个新的数组/列表.(通过对变量类型使用'var'来隐藏这种情况.如果截断后面的代码多次迭代新列表,那么每次*实际上都会重新计算表达式树*.在这种情况下,您可能希望在末尾添加`.ToList()`以强制枚举项目并创建新列表. (9认同)

Dea*_*ing 23

你可以使用List<T>.GetRange():

var subList = myList.GetRange(0, 20);
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

在源中创建一系列元素的浅表副本List<T>.

public List<T> GetRange(int index, int count)


Gar*_*rey 7

如果你真的想要截断列表而不是制作副本,这可能对提高效率有所帮助.虽然python示例制作副本,但原始问题实际上是关于截断列表.

给定List <>对象"列表",你想要第1到第20个元素

list.RemoveRange( 20, list.Count-20 );
Run Code Online (Sandbox Code Playgroud)

这样就可以了.这仍然是O(n),因为必须删除对每个对象的引用,但应该比任何其他方法快一点.