【C# 技术】 C# 常用排序方式——自定义数据排序

C# 常用排序方式——自定义数据排序
 前言

 在最近的项目中经常会对C#中的数据进行排序,对于基本数据类型,其排序方式比较简单,只需要调用内置算法即可实现,但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦,所以在本文章中将详细介绍一下在中C#中如何对数据进行排序。

 应用技术:  LINQ;   Array.Sort();

​ 下面我们进行自定义数据进行排序,如下面代码所示,我们在此处定义了一个 Person类,并且继承了IComparable<Person>接口,该接口主要是用于后面调用Sort方法所必需的接口。

class Person : IComparable<Person>
{
   
   
    public string name {
   
    get; set; }
    public int age {
   
    get; set; }
    public int id {
   
    get; set; }

    public int CompareTo(Person? other)
    {
   
   
        if (this.age > other.age) {
   
    return 1; }
        else {
   
    return -1; }
    }
    public override string ToString()
    {
   
   
        return "(id: " + id + ", name: " + name + ", age: " + age + ")";
    }
};

1. 使用Sort排序

  对于自定义数据,我们可以使用Sort方法直接进行排序,默认是采用正序进行排序,此处提供了三种方式:

  • 方式一:使用默认的Sort()方法直接就可以进行排序,但是需要自定义数据继承IComparable<T>接口
  • 方式二:使用Sort()方法并添加回调函数,回调函数调用数据类型CompareTo()方法,该方法可以进行自定义。
  • 方式三:使用Sort()方法并添加回调函数,回调函数进行自定义,此处采用三目运算符写了个简单的方法,该方式无需继承继承IComparable<T>接口以及在自定义数据中添加比较函数。

  代码如下所示:

static void test_person_sort()
{
   
   
    List<Person> list = new List<Person>()
    {
   
   
                new Person(){
   
   name="a",age=15,id=1 },
                new Person(){
   
   name="b",age=12,id=2 },
                new Person(){
   
   name="c",age=14,id=3 },
                new Person(){
   
   name="d",age=12,id=4 },
                new Person(){
   
   name="e",age=14,id=5 },
                new Person(){
   
   name="f",age=12,id=6 },
                new Person(){
   
   name="g",age=15,id=7 },
            };
    print_array(list);

    // 1. 方式一
    list.Sort();
    // 2. 方式二
    list.Sort((x, y) => x.CompareTo(y));
    // 3. 方式三
    list.Sort((x, y) => x.age > y.age ? 1 : -1);

    print_array(list);

}

  排序后结果输出为:

在这里插入图片描述

  如果想进行逆序排序,需要修改一下比较规则

static void test_person_sort_()
{
   
   
    List<Person> list = new List<Person>()
    {
   
   
                new Person(){
   
   name="a",age=15,id=1 },
                new Person(){
   
   name="b",age=12,id=2 },
                new Person(){
   
   name="c",age=14,id=3 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椒颜皮皮虾྅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值