返回数组的一部分(来自索引)的有效方法?

时间:2017-09-24 11:32:01

标签: c# arrays

有一个int数组,我对从索引10开始的那些感兴趣。因此,我正在编写一个返回一个新数组的方法,该数组由第11个和更多元素组成。 我尝试了Array.Copy,但它没有我需要的选项。最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用ArraySegment

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

这是轻量级结构,它实现了IEnumerable<T>接口,因此您可以在其上使用linq。

编辑:如果您确实需要一个数组作为返回类型,您可以使用linq创建一个新数组:

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

但是,这将为阵列复制分配额外的内存

答案 1 :(得分: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));