2013-12-19 21 views

回答

32

最接近的是真的LINQ .Skip().Take()

例子:

var result1 = myList.Skip(2).Take(2); 
var result2 = myList.Skip(1); 
var result3 = myList.Take(3); 
var result4 = myList.Take(3).Concat(myList.Skip(4)); 
+0

+1當我抓取MSDN網址時,你可以將我惹到棘手的例子:-)這是你的。我可以建議使用'result1','result2'來匹配OP的例子嗎? –

+0

會這樣做,謝謝 – Ben

+0

我希望我可以使用Python(工作項目),但我想我必須解決這個醜陋的東西,在閱讀時我實際上必須考慮這些東西。 – LJNielsenDk

2

這樣你就不必扣除

public static IEnumerable<A> Slice<A> (int from, int to, IEnumerable<A> e) { 
    return e.Take (to).Skip (from); 
} 
1
public static T[] slice<T>(T[] l, int from, int to) 
{ 
    T[] r = new T[to - from]; 
    for (int i = from; i < to; i++) 
    { 
     r[i-from]=l[i]; 
    } 
    return r; 
} 
+4

將解釋添加到您的答案 – HaveNoDisplayName

1

如果你有一個ListGetRange可以派上用場。

從MSDN鏈接:

引用類型的集合,或者說 集合的子集的淺拷貝,只包含對 集合中的元素的引用。對象本身不被複制。 中的參考新列表指向與原始列表中 原始列表中的參考相同的對象。

Slice函數然後可以:

public static IEnumerable<T> Slice<T>(this List<T> source, int from, int to) => source.GetRange(from, to - from); 

負範圍即蟒片支撐件也可以與潔淨度的一些損失來處理。