C# Sort排序

C# Sort排序List的Sort方法排序有三种结果1,0,-1分别表示大于,等于,小于。1.对于数值类型的List(List),直接使用Sort进行排序。ListscoreList=newList(){89,100,78,23,67};scoreList.Sort();//默认按升序排列,相当于:scoreList.Sort((x,y)=>x.CompareTo(y))scoreLis

大家好,又见面了,我是你们的朋友全栈君。

List 的Sort方法排序有三种结果 1,0,-1分别表示大于,等于,小于。

1.对于数值类型的List (List<int>),直接使用Sort进行排序。

List<int> scoreList=new List<int>(){89,100,78,23,67};

scoreList.Sort();//默认按升序排列,相当于:scoreList.Sort((x,y)=>x.CompareTo(y))

scoreList.Sort((x,y)=>-x.CompareTo(y));//降序排列

2.对于非数值类型或者自定义类型,可通过实现IComparable接口重写CompareTo方法来排序:

public class Person : IComparable<Person>
    {
        public string Name { get; set; }
        public int Age { get; set; }

        //ComparetTo:大于 1; 等于 0; 小于 -1;
        public int CompareTo(Person p)
        {
            int result;
            if (this.Name == p.Name && this.Age == p.Age)
            {
                result = 0;
            }
            else
            {
                //this.Name表示后面的 Mary p.Name表示前面的 Bob
                //Mary 跟Bob 由小到大比较,如果Mary 与 Bob 比较 大于0(说明Mary 大于Bob),则 result=1(说明是由小到大的顺序)
                if (this.Name.CompareTo(p.Name) > 0)//先按名字小到大排列
                {
                    result = 1;
                }
                else if (this.Name == p.Name && this.Age > p.Age)//名字相同则按年龄由小到大排列
                {
                    result = 1;
                }
                else
                {
                    result = -1;
                }
            }
            return result;
        }

        public override string ToString()
        {
            return this.Name + "-" + this.Age;
        }
    }
          List<Person> lstPerson = new List<Person>();
            lstPerson.Add(new Person() { Name = "Bob", Age = 19 });
            lstPerson.Add(new Person() { Name = "Mary", Age = 18 });
            lstPerson.Add(new Person() { Name = "Mary", Age = 17 });
            lstPerson.Add(new Person() { Name = "Lily", Age = 20 });
            lstPerson.Sort();
            foreach (Person item in lstPerson)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadKey();

输出:Bob-19 Lily-20 Mary-17 Mary-18

或不实现IComparable接口而使用linq排序:

  List<Person> lstPerson = new List<Person>();
            lstPerson.Add(new Person() { Name = "Bob", Age = 19 });
            lstPerson.Add(new Person() { Name = "Mary", Age = 18 });
            lstPerson.Add(new Person() { Name = "Mary", Age = 17 });
            lstPerson.Add(new Person() { Name = "Lily", Age = 20 });
            lstPerson.Sort();

            lstPerson.Sort((x, y) => {
                int result;
                if (x.Name == y.Name && x.Age == y.Age)
                {
                    result = 0;
                }
                else
                {
                    if (x.Name.CompareTo(y.Name) > 0)
                    {
                        result = 1;
                    }
                    else if (x.Name == y.Name && x.Age > y.Age)
                    {
                        result = 1;
                    }
                    else
                    {
                        result = -1;
                    }
                }
                return result;
            });


            foreach (Person item in lstPerson)
            {
                Console.WriteLine(item.ToString());
            }
            Console.ReadKey();

输出:Bob-19 Lily-20 Mary-17 Mary-18

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159784.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lmdb安装_Vim下载

    lmdb安装_Vim下载lmdb安装在pip和conda环境中都有,但是不能导入

    2022年9月28日
    0
  • pytorch lstm训练例子_半对数模型参数的解释

    pytorch lstm训练例子_半对数模型参数的解释LSTM的参数解释LSTM总共有7个参数:前面3个是必须输入的1:input_size:输入特征维数,即每一行输入元素的个数。输入是一维向量。如:[1,2,3,4,5,6,7,8,9],input_size就是92:hidden_size:隐藏层状态的维数,即隐藏层节点的个数,这个和单层感知器的结构是类似的。这个维数值是自定义的,根据具体业务需要决定,如下图:input_…

    2022年9月10日
    0
  • 数组访问越界_数组越界会导致什么问题

    数组访问越界_数组越界会导致什么问题什么是数组访问越界?所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是C语言程序中最常见的错误之一。在C语言中,数组必须是静态的。换而言之,数组的大小必须在程序运行前就确定下来。由于C语言并不具有类似Java等语言中现有的静态分析工具的功能,可以对程序中数组下标取值范围进行严格检查,一旦发现数组上溢或下溢,都会因抛出异常而终止程序。也就是说,C语言并不检验数组边界,数组的两端都有可能越界,从而使其他变量的数据甚

    2022年10月2日
    0
  • 看看行不行「建议收藏」

    看看行不行「建议收藏」支持FreakshareRapidgatorHotfileKeep2shareRyushareFilepostLumfileBitshareFilefactoryExtabitNetloadUploaded.toUl.toCtdisk等主流网盘会员直接高速下载!Ctdisk城通网盘/Dbank华为网盘完全免费!http://wishuhappy.com/[@Ie4Gy

    2022年9月6日
    2
  • idea2021 激活码 csdn【永久激活】

    (idea2021 激活码 csdn)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

    2022年3月20日
    662
  • MySQL基础课堂笔记「建议收藏」

    MySQL基础课堂笔记「建议收藏」MySQL基础知识学习笔记整理今日内容数据库的基本概念MySQL数据库软件安装卸载配置SQL数据库的基本概念1.数据库的英文单词:DataBase简称:DB2.什么数据库? *用于存储和管理数据的仓库。3.数据库的特点: 1.持久化存储数据的。其实数据库就是一个文件系统 2.方便存储和管理数据 3.使用了统一的方式操作数据库…

    2022年7月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号