咨询:C#中使用LINQ实现数组升序降序的其他方法
数组升序/降序排序的其他实现方法
你已经用LINQ查询表达式实现了排序,除此之外,还有以下几种常用的方式来完成数组的升序和降序排序:
1. LINQ方法语法(链式调用)
这是LINQ的另一种写法,和查询表达式逻辑等价,但代码更简洁:
int[] scores = [79, 92, 98, 2]; // 升序排序 var sortedAsc = scores.OrderBy(s => s); // 降序排序 var sortedDesc = scores.OrderByDescending(s => s); // 执行并输出结果 foreach (var s in sortedAsc) Console.Write($"{s} "); Console.WriteLine(); foreach (var s in sortedDesc) Console.Write($"{s} ");
这种方式返回IEnumerable<int>,不会修改原数组,和查询表达式的底层实现一致。
2. Array类的原地排序方法
直接使用.NET内置的Array.Sort和Array.Reverse,会直接修改原数组,无需额外创建新序列:
int[] scores = [79, 92, 98, 2]; // 原地升序排序 Array.Sort(scores); foreach (var s in scores) Console.Write($"{s} "); // 输出:2 79 92 98 Console.WriteLine(); // 原地降序排序:先升序再反转 Array.Reverse(scores); foreach (var s in scores) Console.Write($"{s} "); // 输出:98 92 79 2
如果不想修改原数组,可以先克隆数组再操作:
int[] scores = [79, 92, 98, 2]; // 升序副本 int[] sortedAscCopy = (int[])scores.Clone(); Array.Sort(sortedAscCopy); // 降序副本 int[] sortedDescCopy = (int[])scores.Clone(); Array.Sort(sortedDescCopy); Array.Reverse(sortedDescCopy);
3. Array.Sort结合自定义比较器
如果需要灵活的排序逻辑,可以传入Comparison<int>委托实现自定义排序:
int[] scores = [79, 92, 98, 2]; // 直接原地降序排序 Array.Sort(scores, (a, b) => b.CompareTo(a)); foreach (var s in scores) Console.Write($"{s} "); // 输出:98 92 79 2
这种方式适合需要复杂排序规则的场景,同样是原地修改数组。
关于两种类型定义的补充
你使用的IEnumerable<int>和var都是合法的写法:
- 显式声明
IEnumerable<int>能明确返回类型,可读性更强; - 使用
var让编译器自动推断类型,代码更简洁,二者功能完全一致。
内容的提问来源于stack exchange,提问作者Rohan Sharma
相关产品推荐
相关产品推荐

