在 C# 中,可以通过多种方式遍历数组的不同范围,根据需求选择适合的方式。以下是几种常见的实现方式:
示例数组
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
1. 使用for循环遍历特定范围
使用 for 循环指定起始和结束索引,灵活控制范围。
示例代码
Console.WriteLine("使用 for 循环遍历:");
for (int i = 2; i < 6; i++) // 遍历索引 2 到 5
{
Console.WriteLine(array[i]);
}
输出
3
4
5
6
2. 使用foreach遍历子数组
通过数组切片生成子数组后,用 foreach 遍历。
示例代码
Console.WriteLine("使用 foreach 遍历子数组:");
int[] subArray = array[2..6]; // C# 8.0 的范围操作符,表示索引 2 到 5 的元素
foreach (int item in subArray)
{
Console.WriteLine(item);
}
输出
3
4
5
6
3. 使用Span遍历范围
Span
示例代码
Console.WriteLine("使用 Span 遍历:");
Span span = array.AsSpan(2, 4); // 从索引 2 开始,长度为 4
foreach (int item in span)
{
Console.WriteLine(item);
}
输出
3
4
5
6
4. 使用LINQ方法筛选范围
LINQ 提供方法对数组进行范围筛选并遍历,例如 Skip 和 Take。
示例代码
using System.Linq;
Console.WriteLine("使用 LINQ 遍历:");
var range = array.Skip(2).Take(4); // 跳过前 2 个,取接下来的 4 个
foreach (int item in range)
{
Console.WriteLine(item);
}
输出
3
4
5
6
5. 使用Parallel.For遍历范围(并行)
对于需要并行执行操作的场景,可以使用 Parallel.For。
示例代码
using System.Threading.Tasks;
Console.WriteLine("使用 Parallel.For 遍历:");
Parallel.For(2, 6, i =>
{
Console.WriteLine($"索引 {i}: {array[i]}");
});
输出(可能顺序不固定)
索引 2: 3
索引 3: 4
索引 4: 5
索引 5: 6
6. 手动创建范围切片并遍历
通过手动实现切片的方式获取范围,然后使用 foreach 遍历。
示例代码
Console.WriteLine("手动创建范围切片并遍历:");
int start = 2;
int count = 4;
int[] slice = new int[count];
Array.Copy(array, start, slice, 0, count);
foreach (int item in slice)
{
Console.WriteLine(item);
}
输出
3
4
5
6
总结
遍历方式 | 优点 | 缺点 |
for 循环 | 高效,适合精确控制范围 | 手动指定索引范围,代码较冗长 |
foreach + 切片 | 简洁易读 | 需要生成新的子数组,开销稍大 |
Span | 高效内存操作,无需新数组 | 需 C# 7.2 或更高版本 |
LINQ 方法 | 代码简洁,支持多种链式操作 | 性能稍低,不适合性能关键场景 |
Parallel.For | 并行执行,适合性能优化 | 顺序不固定,复杂性增加 |
手动切片 | 自定义范围逻辑,兼容性高 | 代码繁琐,需要额外内存 |
选择遍历方法时,根据实际场景的需求(如性能、可读性、兼容性)做出权衡。例如,性能关键场景可以优先考虑 for 循环和 Span