如何遍历C#数组的不同范围?请使用多种遍历方式进行说明

如何遍历C#数组的不同范围?请使用多种遍历方式进行说明

编码文章call10242025-02-09 12:01:4910A+A-

在 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,而对于简洁易读的场景可以选择 LINQ 或 foreach。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4