📅  最后修改于: 2023-12-03 15:18:10.361000             🧑  作者: Mango
C#中的orderby
用于对数据按照指定的排序规则进行排序。默认情况下,orderby
按照升序排序。如果需要按照降序排序,则需要使用关键字descending
。此外,orderby
也支持对多个属性进行排序。
对于需要进行随机排序的情况,C#中也提供了相应的解决方案。本文将介绍C#中的orderby
以及如何进行随机排序。
在C#中,orderby
可用于对IEnumerable
集合中的元素进行排序。下面是一个简单的示例:
var numbers = new[] { 5, 2, 8, 1, 6 };
var sortedNumbers = from n in numbers
orderby n
select n;
foreach (var n in sortedNumbers)
{
Console.WriteLine(n);
}
该示例中,numbers
数组中的元素按照升序排列。orderby
关键字后的变量n
表示需要排序的属性名,其后可带有可选的descending
关键字。
如果需要对多个属性进行排序,可以使用多个orderby
关键字。以下是一个示例:
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
var people = new[]
{
new Person { FirstName = "John", LastName = "Doe", Age = 30 },
new Person { FirstName = "Jane", LastName = "Doe", Age = 25 },
new Person { FirstName = "Bob", LastName = "Smith", Age = 50 },
};
var sortedPeople = from p in people
orderby p.LastName ascending, p.FirstName ascending
select p;
foreach (var p in sortedPeople)
{
Console.WriteLine("{0} {1}, {2}", p.FirstName, p.LastName, p.Age);
}
该示例中,sortedPeople
集合中的元素首先按照LastName
进行升序排序,如果LastName
相同,则按照FirstName
进行升序排序。最终的排序结果如下:
John Doe, 30
Jane Doe, 25
Bob Smith, 50
如果需要对集合进行随机排序,C#中也提供了相应的解决方案。下面是一个示例:
var people = new[]
{
new { Name = "John", Age = 30 },
new { Name = "Jane", Age = 25 },
new { Name = "Bob", Age = 50 },
};
var randomPeople = from p in people
orderby Guid.NewGuid()
select p;
foreach (var p in randomPeople)
{
Console.WriteLine("{0}, {1}", p.Name, p.Age);
}
该示例中,guid.NewGuid()
返回一个全局唯一的标识符。对所有元素都调用该方法后,将生成一个随机的集合。
需要注意的是,本示例只适用于小型集合。对于较大的集合,采用该方法会影响性能。较好的方式是将所有元素存储到一个List
中,然后使用洗牌算法对其进行随机排序。
public static void Shuffle<T>(List<T> list)
{
var rng = new Random();
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
上述代码中,Shuffle
方法将随机打乱一个List
集合中的元素。
C#中的orderby
可用于对集合中的元素进行排序。默认情况下按照升序排序。如果需要按照降序排序,则需要使用关键字descending
。orderby
也支持对多个属性进行排序。
对于需要进行随机排序的情况,可以使用guid.NewGuid()
方法或者洗牌算法。但是需要注意,对于较小的集合可以采用guid.NewGuid()
方法,对于较大的集合则需要使用洗牌算法。