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

相关推荐

  • python最好的开发工具_Python编译器

    python最好的开发工具_Python编译器对于开发工具,仁者见仁智者见智,关键是自己喜欢,用着顺手就好,不用刻意去追求别人用的是什么工具。这里给大家主要推荐三款工具,分别是PyCharm、SublimeText3、VSCode,因为这

    2022年8月3日
  • 2017中国程序员薪资生存现状调查报告结论_程序员的收入

    2017中国程序员薪资生存现状调查报告结论_程序员的收入程序员一直都是一个备受人们关注的群体。2014年,据IDC统计,全球约有1850万名程序员,中国占10%。随着近年全国互联网创业热潮的兴起,“互联网+”、“云计算”以及“智能硬件”等领域发展迅速,市场对程序员的需求更为旺盛。  由程序员客栈联合稀土掘金通过对北京、广东、浙江、上海等全国28个省、直辖市及特别行政区的10W+优秀程开发者进行了一次调查。调查报告里对程序员的年龄组成、性别比例、

    2022年10月11日
  • WinExec、ShellExecute用法详解「建议收藏」

    WinExec、ShellExecute用法详解「建议收藏」1、WinExec():  WinExec主要运行EXE文件,不能运行其他类型的文件,不用引用特别单元。原型是:UINTWinExec(exePath,ShowCmd)  参数说明:  –xePath:命令行参数。注意,要用pChar转化一下。  –ShowCmd:外部程序的运行方式。其取值如下:  —-SW_HIDE隐藏  —-SW_MAXI…

    2022年7月11日
  • Multisim使用教程_ppt2016零基础入门教程

    Multisim使用教程_ppt2016零基础入门教程Multisim软件使用详细教程(图文全解)目录一、Multisim作用二、Multisim14.0的界面1.设计窗口2.菜单栏3.工具栏4.元器件栏和仪器仪表栏三、元器件5.元器件-基本器件6.元器件-电解电容7.元器件-开关开关-修改快捷键8.元器件-电位器调节电位器-第一种方法调节电位器-第二种方法调节电位器-修改调节精度电位器-修改快捷键修改电阻、电位器的阻值修改电容、电解电容的电容量9.元器件-二极管和稳压二极管……

    2022年9月15日
  • typescript教程阮一峰_在博图里怎样定义一个变量

    typescript教程阮一峰_在博图里怎样定义一个变量在TypeScript项目中像PHP一样使用魔术变量

    2022年4月20日
  • vue项目中使用postcss-px2rem的方法总结「建议收藏」

    vue项目中使用postcss-px2rem的方法总结「建议收藏」标题vue项目中postcss-px2rem的使用在项目中为了屏幕适配,经常会用到rem,postcss-px2rem就是为了让我们直接在将代码中px自动转化成对应的rem的一个插件如何使用:1.安装npmipostcss-px2rem–save-dev2.设置(以下总结了三种方式)1).找到项目根目录下的.postcssrc文件module.exports={“plugins”:{“postcss-import”:{},”postcss-url”

    2022年10月24日

发表回复

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

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