如何在C#中截断列表?

时间:2010-08-06 22:29:25

标签: c# list truncate

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

6 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:22)

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

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

来自MSDN:

  

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

     

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

答案 2 :(得分:6)

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

给定列表&lt;&gt;对象“列表”,你想要第1到第20个元素

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

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

答案 3 :(得分:3)

没有LINQ快速......

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

答案 4 :(得分:0)

    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;
        }
    }

答案 5 :(得分:0)

可以使用RemoveRange关键字将列表截断。功能如下:

  void List<type>.RemoveRange(int index, int count);

这会将元素从index删除到count。 将其用于int类型,以从0删除到不需要的点:

代码:

int maxlimit = 100;
List<int> list_1 = new List<int>();
if (list_1.Count > maxLimit){
    list_1.RemoveRange(0, (list_1.Count - maxlimit));
}