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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IntelliJ IDEA快速入门 | 第三篇:彻底卸载IntelliJ IDEA

    IntelliJ IDEA快速入门 | 第三篇:彻底卸载IntelliJ IDEA写在前面之前,笔者在自己本机上就已经安装过了一个IntelliJIDEA,只不过其版本是2019.1.3,在桌面上的快捷方式如下图所示。而且之前我也已经将其激活成功教程了,就是网上找的方案来进行激活成功教程的,激活成功教程之后确实能用,不过由于那个时候我还在用Eclipse做Java后端开发,所以一直都没用IntelliJIDEA,不知道过了多长时间,打开它发现已过试用期,MD,老子不是已经激活成功教程过了吗,而且好像还能用到2099年,就这,就这,就这,就这就不能用了????各位看官老爷们,今天是2021年3月23日,下午1

    2022年6月17日
    51
  • spring boot activiti工作流_activiti工作流优缺点

    spring boot activiti工作流_activiti工作流优缺点SpringBoot集成activiti工作流(模拟请假流程)链接:https://pan.baidu.com/s/10BT_Zertm1WBBrlrdE-QWQ提取码:zsq6学习视频地址见腾讯课堂:https://ke.qq.com/course/459167其他代码都是最原始的测试activiti的api代码,整合springboot的所有代码见下图.1.pom文件<dependency><groupId…

    2022年9月28日
    0
  • 大数据,云计算和物联网,三者之间的关系是什么?

    大数据,云计算和物联网,三者之间的关系是什么?大数据,云计算,物联网,这些听着耳熟吗?你知道这些新兴产业各自的特点吗?今天,咱们就从最基本的概念着手,给大家科普一下!一、最热门的人工智能目前为止,人类还没能给出统一的定义。但通常来说,凡是使用机器代替人类实现认知、识别、分析、决策等功能,均可认为使用了人工智能技术。如今人工智能商业化正在各个领域中快速推进:记得哦!人工智能主要包括软件及信息技术服务业、计算机、高端制造等行业。二、大数…

    2022年10月7日
    1
  • 单调队列-原理详解(deque实现)[通俗易懂]

    单调队列-原理详解(deque实现)[通俗易懂]一、单调队列的概念:单调队列,即单调递减或单调递增的队列。二、单调队列的性质:1.队列中的元素在原来的列表中的位置是由前往后的(随着循环顺序入队)。2.队列中元素的大小是单调递增或递减的。三、单调队列的特点:从队尾入列,队首或队尾出列。四、例题分析:那么单调队列用什么用呢?单调队列一般用于求区间内的最值问题。看几道题,理解上述内容:1.洛谷P1886…

    2022年6月25日
    30
  • 【java】反射

    【java】反射https://blog.csdn.net/aiming66/article/details/851254871、什么是反射技术?动态获取指定类以及类中的内容(成员),并运行其内容。应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象。这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例。这就需要使用反射技术完成2、获取class对象的方式2.1…

    2022年7月12日
    12
  • python粒子群算法的实现「建议收藏」

    python粒子群算法的实现「建议收藏」参考博客:http://blog.csdn.net/zuochao_2013/article/details/53431767?ref=myreadhttp://blog.csdn.net/chen_jp/article/details/7947059算法介绍粒子群算法(particleswarmoptimization,PSO)由Kennedy和Eberhart在1995年…

    2022年5月8日
    44

发表回复

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

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