📜  c# 获取数组子数组 - C# (1)

📅  最后修改于: 2023-12-03 14:59:43.383000             🧑  作者: Mango

C# 获取数组子数组

在C#中,获取数组的子数组是常见的需求。下面介绍几种获取子数组的方法。

1. ArraySegment

通过ArraySegment<T>可以获取原始数组中的一段子数组。它是针对T[]类型的一种包装器,主要包括ArrayOffsetCount三个属性,它们分别表示原始数组的引用、子数组的起始位置和子数组的长度。

int[] originalArray = new int[] { 1, 2, 3, 4, 5 };
ArraySegment<int> subArray = new ArraySegment<int>(originalArray, 1, 3);
// subArray = { 2, 3, 4 }

需要注意的是,ArraySegment<T>并不会创建新的数组,而是与原始数组共享同一块内存,因此在使用时要小心避免对原始数组的修改。

2. LINQ

使用LINQ可以轻松地获取数组的子数组。下面是通过TakeSkip方法获取子数组的示例:

int[] originalArray = new int[] { 1, 2, 3, 4, 5 };
int[] subArray = originalArray.Skip(1).Take(3).ToArray();
// subArray = { 2, 3, 4 }

其中,Skip方法表示跳过指定数量的元素,Take方法表示选取指定数量的元素。需要注意的是,SkipTake方法都会创建新的数组。

3. 手动遍历

当无法使用ArraySegment<T>和LINQ时,手动遍历数组是另一种获取子数组的方法。下面是通过循环获取子数组的示例:

int[] originalArray = new int[] { 1, 2, 3, 4, 5 };
int[] subArray = new int[3];
for (int i = 0; i < 3; i++)
{
    subArray[i] = originalArray[i + 1];
}
// subArray = { 2, 3, 4 }

需要注意的是,手动遍历数组需要需要自己创建新的数组,并且效率较低,不适用于大规模的操作。

以上三种方法均可以用于一维数组的获取子数组,对于多维数组的获取子数组方法略有差异。

参考链接