2017-09-24 62 views
0

有一個int數組,我對那些從索引10開始的數組感興趣。因此,我正在編寫一個方法,它將返回一個由11個和更多元素組成的新數組。 我試過Array.Copy,但它沒有我需要的選項。最好的辦法是什麼?返回數組的一部分(來自索引)的有效方法?

+0

陣列是' IEnumerable'所以使用'Skip()'和'Take()'。 – Crowcoder

回答

1

您可以使用ArraySegment

var source = new int[20]; 
var segment = new ArraySegment<int>(source, 10, source.Length - 10); 

這是輕量級的結構,因此你可以在上面使用LINQ它實現了一個IEnumerable<T>接口。

編輯:如果你真的需要一個數組作爲返回類型,你可以創建LINQ一個新的數組:

source.Skip(9).ToArray(); // skip from 0 to 9 and use a rest of source array 

然而,這將分配更多的內存數組複製

0
public static T[] SubArray<T>(this T[] data, int index, int length) 
{ 
    T[] result = new T[length]; 
    Array.Copy(data, index, result, 0, length); 
    return result; 
}  

int startIndex=10; 
    int[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 
    int[] sub = data.SubArray(startIndex, (data.Length-startIndex)-1)); 
+0

沒有這樣的方法:'SubArray'。 – Dmitry

+0

感謝德米特里,指定的方法代碼已在最新的解決方案。 –

相關問題