You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:17:13