我知道在python中你可以做类似myList[1:20]
的事情,但C#中有类似的内容吗?
答案 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));
}