C#数组集合常用排序方式,你想要的都在这儿
前言
程序员的世界,有两件事是永远绕不开的:一个是“加班”,另一个就是“排序”。面对一堆无序的数据,就像看见桌上一堆乱糟糟的电线,心里总是不踏实。而C#给我们提供了非常简洁的工具,让排序变成一种轻松愉快的工作。今天,我们就一起来探索这些C#常用的排序方式吧!别紧张,咱们要用幽默的方式聊聊排序,保证让你笑着学会!
1. 使用 Sort 排序
先来个简单点的,C#里最常用的Array.Sort()。这是C#官方指定的“整理大师”,几乎适用于所有数组场景,调用之后它会直接帮你把数据从小到大排好,速度飞快,还不用操心细节。
代码示例:
int[] numbers = { 5, 1, 4, 3, 2 };
Array.Sort(numbers);
Console.WriteLine(string.Join(", ", numbers)); // 输出: 1, 2, 3, 4, 5
Array.Sort()是那种“你只要给我一个数组,我就给你一个结果”的排序方式,简单粗暴。无论你是多么懒的程序员,都能愉快使用。
2. 使用 LINQ 语句进行排序
如果你觉得Sort太基础,不够炫酷,那么LINQ一定能让你眼前一亮。LINQ不仅让代码更简洁,还能优雅地处理排序逻辑,比如我们用OrderBy对数组进行排序。
代码示例:
int[] numbers = { 5, 1, 4, 3, 2 };
var sortedNumbers = numbers.OrderBy(n => n).ToArray();
Console.WriteLine(string.Join(", ", sortedNumbers)); // 输出: 1, 2, 3, 4, 5
LINQ的语法不仅清晰直观,还带着一种“高大上”的气质。就像你在写诗一样,每一行代码都充满了优雅。
3. 多条件排序
有时候,事情并不是那么简单。比如你想给学生按成绩排序,但是分数相同的还要按名字排,这就是传说中的“多条件排序”。C#的ThenBy可以轻松搞定这种复杂情况。
代码示例:
var students = new[]
{
new { Name = "Alice", Score = 85 },
new { Name = "Bob", Score = 90 },
new { Name = "Charlie", Score = 85 }
};
var sortedStudents = students.OrderBy(s => s.Score).ThenBy(s => s.Name).ToArray();
foreach (var student in sortedStudents)
{
Console.WriteLine($"{student.Name}: {student.Score}");
}
// 输出:
// Alice: 85
// Charlie: 85
// Bob: 90
看,多条件排序就像比赛中的附加赛,决胜的时候,总有更多规则来决定最终排名。而LINQ的ThenBy正是为这种情况设计的。
4. 多维数据排序
如果你认为一维数组已经足够复杂,那多维数组可能会让你眉头一皱。不过别担心,C#的LINQ依然可以施展魔法,帮助我们轻松排序。
代码示例:
int[,] numbers = { { 3, 5 }, { 1, 4 }, { 2, 6 } };
var sortedNumbers = numbers.Cast<int>().OrderBy(n => n).ToArray();
foreach (var num in sortedNumbers)
{
Console.Write(num + " "); // 输出: 1 2 3 4 5 6
}
使用Cast和OrderBy,你可以把多维数组“展平”后轻松排序,就像把一盘打结的耳机线理顺,瞬间舒心!
5. 自定义排序规则
排序不只是按照数字大小,也可以基于你自己的规则。比如说,你要按字符串的长度排序?没问题!C#允许你通过委托来自定义排序规则。
代码示例:
string[] fruits = { "apple", "banana", "pear", "grape" };
Array.Sort(fruits, (x, y) => x.Length.CompareTo(y.Length));
Console.WriteLine(string.Join(", ", fruits)); // 输出: pear, apple, grape, banana
这里的自定义排序规则,就像你自己定了个“游戏规则”:谁名字短,谁优先。你要的排序规则,你说了算!
6. 倒序排序
有时候,我们不想从小到大,而是从大到小排列。比如你想按分数从高到低排个榜单,C#同样可以做到!只需在OrderBy后面加个Descending。
代码示例:
int[] numbers = { 5, 1, 4, 3, 2 };
var sortedNumbers = numbers.OrderByDescending(n => n).ToArray();
Console.WriteLine(string.Join(", ", sortedNumbers)); // 输出: 5, 4, 3, 2, 1
想让一切“反其道而行之”?用OrderByDescending,轻松实现逆序排列。
总结
看吧,C#的排序简直是一场“美食大餐”,从Sort到LINQ,从单条件到多条件,还有自定义规则和倒序排列,各种方式应有尽有。无论你面对的是数字、字符串,还是自定义对象,C#都给了你足够的武器,让你在排序的世界里游刃有余。最重要的是,代码不光要写得正确,还要写得优雅、有趣!希望本文对大家有所收获,大家还遇到那些排序,欢迎留言讨论。