How do I truncate a list in C#?

余生颓废 提交于 2019-12-21 07:06:26

问题


I know in python you can do something like myList[1:20] but is there anything similar in C#?


回答1:


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



回答2:


You can use List<T>.GetRange():

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

From MSDN:

Creates a shallow copy of a range of elements in the source List<T>.

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




回答3:


This might be helpful for efficiency, if you really want to truncate the list, not make a copy. While the python example makes a copy, the original question really was about truncating the list.

Given a List<> object "list" and you want the 1st through 20th elements

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

This does it in place. This is still O(n) as the references to each object must be removed, but should be a little faster than any other method.




回答4:


sans LINQ quicky...

    while (myList.Count>countIWant) 
       myList.RemoveAt(myList.Count-1);



回答5:


    public static IEnumerable<TSource> MaxOf<TSource>(this IEnumerable<TSource> source, int maxItems)
    {
        var enumerator = source.GetEnumerator();            
        for (int count = 0; count <= maxItems && enumerator.MoveNext(); count++)
        {
            yield return enumerator.Current;
        }
    }


来源:https://stackoverflow.com/questions/3428242/how-do-i-truncate-a-list-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!