前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【100个 Unity实用技能】| C# 中 Sort() 对List中的数据排序的几种方法 整理总结

【100个 Unity实用技能】| C# 中 Sort() 对List中的数据排序的几种方法 整理总结

作者头像
呆呆敲代码的小Y
发布2022-11-12 13:18:41
2.2K0
发布2022-11-12 13:18:41
举报
文章被收录于专栏:呆呆敲代码的小Y 公众号

Unity 小科普

老规矩,先介绍一下 Unity 的科普小知识:

  • Unity是 实时3D互动内容创作和运营平台 。
  • 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。
  • Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
  • 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
  • 🎬 博客主页:https://xiaoy.blog.csdn.net
  • 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉
  • 🎄 学习专栏推荐:Unity系统学习专栏
  • 🌲 游戏制作专栏推荐:游戏制作
  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程
  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📆 未来很长,值得我们全力奔赴更美好的生活✨
  • ------------------❤️分割线❤️-------------------------
请添加图片描述
请添加图片描述

Unity 实用小技能学习

C#对List中的数据排序的几种方法

在C#中我们会经常用到List<>作为一个容器使用,在使用的过程中往往要对集合中的数据进行排序操作。

本文就来介绍一些好用的排序方法,一起来看看吧!

一、对 值类型 进行排序直接使用 Sort()方法

直接使用 C# 中的成员方法 Sort() 可以对C#本身的几种类型进行排序,比如 int,float,double 等。

Sort() 有四种重载如下:

代码语言:javascript
复制
        public void Sort(Comparison<T> comparison);
        public void Sort(int index, int count, IComparer<T> comparer);
        public void Sort();
        public void Sort(IComparer<T> comparer);

具体示例:

代码语言:javascript
复制
	//申明一个List容器
	List<int> list = new List<int>();
	//向list中添加数据
	list.Add(999);
	list.Add(666);
	list.Add(888);
	//排序
	list.Sort();
在这里插入图片描述
在这里插入图片描述

值得一提的是,直接使用 Sort() 对List也可以排序,默认的排序规则是按照ASCII码进行的。

在这里插入图片描述
在这里插入图片描述
二、对自定义类型进行排序

首先声明一个自定义类型

代码语言:javascript
复制
    class Student
    {
        public string name;
        public int age;
        public Student(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
    }

声明一个自定义类型的List

代码语言:javascript
复制
        List<Student> studentList = new List<Student>();
        studentList.Add(new Student("小Y",20));
        studentList.Add(new Student("小小Y", 10));
        studentList.Add(new Student("Y", 30));
        
        //studentList.Sort();//会报错

此时直接使用studentList.sort()是报错的:ArgumentException:至少一个对象必须实现IComparable。

在这里插入图片描述
在这里插入图片描述

下面就来介绍几种可以自定义类型排序的几种方法

1. 继承接口IComparable<>

将自定义类型继承 接口IComparable<> ,并实现接口成员CompareTo

按照年龄进行排序,代码如下:

代码语言:javascript
复制
    class Student:IComparable<Student>
    {
        public string name;
        public int age;
        public Student(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
        public int CompareTo(Student other)
        {
            //返回值含义:
            //小于0:放在传入对象的前面
            //等于0:保持当前的位置不变
            //大于0:放在传入对象的后面
            if (this.age > other.age) return 1;
            else return -1;
        }
    }

此时声明一个自定义类型的List,并进行排序,就可以正常排序成功啦!

代码语言:javascript
复制
        List<Student> studentList = new List<Student>();
        studentList.Add(new Student("小Y",20));
        studentList.Add(new Student("小小Y", 10));
        studentList.Add(new Student("Y", 30));
        studentList.Sort();

        foreach (var l in studentList)
        {
            Debug.Log("name:"+l.name+",age:"+ l.age);
        }
在这里插入图片描述
在这里插入图片描述

2. 定义一个委托方法进行排序

Sort() 有一种重载参数是一个返回值为int类型的委托类型,可以在外面声明一个用来排序的方法。

代码如下:

代码语言:javascript
复制
    class Student
    {
        public string name;
        public int age;
        public Student(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
    }
    
    void Start()
    {
        List<Student> studentList = new List<Student>();
        studentList.Add(new Student("小Y",20));
        studentList.Add(new Student("小小Y", 10));
        studentList.Add(new Student("Y", 30));
        studentList.Sort(SortItem);//将方法名作为参数传递,实现排序
    }
    
    private int SortItem(Student stu1, Student stu2)
    {
        //传入的对象为列表中的对象
        //进行两两比较,用左边的和右边的 按条件 比较
        //返回值规则与接口方法相同
        if (stu1.age > stu2.age) return 1;
        else return -1;
    }

上述代码也可以使用 Lambda表达式 直接排序,代码如下:

代码语言:javascript
复制
        List<Student> studentList = new List<Student>();
        studentList.Add(new Student("小Y",20));
        studentList.Add(new Student("小小Y", 10));
        studentList.Add(new Student("Y", 30));

        studentList.Sort((stu1, stu2) => { return stu1.age > stu2.age ? 1 : -1; });

3.若自定义类型中有多个数值都要参与到排序规则中,可自定义排序类型先后

代码语言:javascript
复制
    class Student
    {
        public string name;
        public int age;
        public int score;
        public Student(string name,int age,int score)
        {
            this.name = name;
            this.age = age;
            this.score = score;
        }

        public static int Sort(Student a, Student b)
        {
            if (a.score > b.score)
            {
                // -1表示将a排在b前面
                return -1;
            }
            else if (a.score == b.score)//若分数相同时,再按照年龄进行排序
            {
                if (a.age > b.age)
                {
                    return -1;
                }
                else if (b.age > a.age)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
            else
            {
                return 1;
            }
        }
    }
    void Start()
    {
        List<Student> studentList = new List<Student>();
        studentList.Add(new Student("小Y", 20, 90));
        studentList.Add(new Student("小小Y", 20, 80));
        studentList.Add(new Student("Y", 30, 90));
        studentList.Sort(Student.Sort);

        foreach (var l in studentList)
        {
            Debug.Log("name:" + l.name + ",age:" + l.age + ",score:" + l.score);
        }
    }
在这里插入图片描述
在这里插入图片描述

上述几种排序方法中 一般使用 委托方法的Lambda表达式 就可以满足我们大部分的排序需求了!

代码语言:javascript
复制
 list.Sort((item1, item2) => { return item1.age > item2.age ? 1 : -1; });
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Unity 小科普
  • Unity 实用小技能学习
    • C#对List中的数据排序的几种方法
      • 一、对 值类型 进行排序直接使用 Sort()方法
      • 二、对自定义类型进行排序
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档