问题
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