如何在C#中截断列表?
我知道在python中你可以做类似myList[1:20]
东西,但C#中有类似的东西吗?
var itemsOneThroughTwenty = myList.Take(20); var itemsFiveThroughTwenty = myList.Skip(5).Take(15);
您可以使用List
:
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; } }