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