结构ArraySegment<T>表示数组的一段。如果需要使用不同的方法处理某个大型数组的不同部分,那么可以把相应的数组部分复制到各个方法。
ArraySegment<T>结构包含了关于数组段的信息(偏移量和元素个数)。
//数组段不复制原数组的元素,但原数组可以通过ArraySegment<T>访问。如果数组段中的元素改变了,这些变化就会反映到原数组中。
private void TestArraySeg()
{
int[] a1 = new int[] { 1, 3, 5, 7, 9 };
int[] a2 = new int[] { 2, 4, 6, 8, 10 };
var seg = new ArraySegment<int>[2]
{
new ArraySegment<int>(a1, 0, 3),
new ArraySegment<int>(a2, 2, 3)
};
Debug.Log("SumArraySegment = " + SumArraySegment(seg));
for (int i = 0; i < a1.Length; i++)
{
Debug.Log("a1 = " + a1[i]);
}
for (int i = 0; i < a2.Length; i++)
{
Debug.Log("a2 = " + a2[i]);
}
}
private int SumArraySegment(ArraySegment<int>[] seg)
{
int sum = 0;
for (int i = 0; i < seg.Length; i++)
{
for (int j = seg[i].Offset; j < seg[i].Offset + seg[i].Count; j++)
{
//可以通过数组段访问原数组,修改原数组的值
seg[i].Array[j] = 0;
//sum += seg[i].Array[j];
}
}
return sum;
}