如何在C#中截断列表?

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

 var itemsOneThroughTwenty = myList.Take(20); var itemsFiveThroughTwenty = myList.Skip(5).Take(15); 

您可以使用List.GetRange()

 var subList = myList.GetRange(0, 20); 

来自MSDN:

在源List创建一系列元素的浅表副本。

public List GetRange(int index, int count)

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

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

 list.RemoveRange( 20, list.Count-20 ); 

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

sans LINQ quicky …

  while (myList.Count>countIWant) myList.RemoveAt(myList.Count-1); 
  public static IEnumerable MaxOf(this IEnumerable source, int maxItems) { var enumerator = source.GetEnumerator(); for (int count = 0; count <= maxItems && enumerator.MoveNext(); count++) { yield return enumerator.Current; } }