C#中sort排序相关用法介绍

这篇具有很好参考价值的文章主要介绍了C#中sort排序相关用法介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 C#中,List.Sort() 不仅为我们提供了默认的排序方法,还为我们提供了4种自定义排序的方法,通过默认排序方法,我们无需重写任何Sort()方法的实现代码,就能对单参数类型的List数据进行单一规则的排序,如果通过对这些方法进行改进我们可以轻松做到对多参数、多规则的复杂排序。

下面通过程序示例介绍四种相关的方法:

1.第一种,sort自带的list排序功能,但是该方法只是适用于单个元素的list。

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
class test 
{
    static void Main(string[] args)
    {

        List<int> list = new List<int>();
        list.Add(6);
        list.Add(4);
        list.Add(3);
        list.Add(5);
        //直接对数字进行排序
        list.Sort();
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
        Console.ReadKey();
    }
 }

c# sort,C#从入门到精通系列,c#

对于多元素的list,需要用不同的排序方式对元素进行排序。

未排序:

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
class test 
{
    static void Main(string[] args)
    {

        List<student> stu = new List<student>();
        stu.Add(new student("apple", 23));
        stu.Add(new student("banana",18));
        stu.Add(new student("orange",19));

        foreach (var item in stu)
        {
            Console.WriteLine(item.Name+" "+" "+item.Age);
        }

        Console.ReadKey();

    }
 }

class student
{
    public student(string name, int age) { Name = name; Age = age; }
    public string Name;
    public int Age;
}



c# sort,C#从入门到精通系列,c#

第二种接口排序:

该种方法是在定义的类内,通过Icomparable接口在类内定义排序的准则的方法。

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
class test 
{
    static void Main(string[] args)
    {

        List<student> stu = new List<student>();
        stu.Add(new student("apple", 23));
        stu.Add(new student("banana",18));
        stu.Add(new student("apple",22));
        stu.Add(new student("orange",19));

        //
        stu.Sort();
        foreach (var item in stu)
        {
            Console.WriteLine(item.Name+" "+" "+item.Age);
        }

        Console.ReadKey();
    }
 }

class student:IComparable<student>
{
    public student(string name, int age) { Name = name; Age = age; }
    public string Name;
    public int Age;

    public int CompareTo(student other)
    {
        if (this.Name!=other.Name)
        {
            return this.Name.CompareTo(other.Name);
        }
        else if (this.Age!=other.Age)
        {
            return this.Age.CompareTo(other.Age);
        }
        return 0;
    }
}

c# sort,C#从入门到精通系列,c#

第三种方法:接口排序的第二种

该种方法时定义了一个类是作为一种方法,该类将需要排序的元素类引用,通过Icampara接口,在主函数中需要排序命令中载入该类的参数。

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
class test 
{
    static void Main(string[] args)
    {

        //第一种方法
        List<student> stu = new List<student>();
        stu.Add(new student("apple", 23));
        stu.Add(new student("banana", 18));
        stu.Add(new student("apple", 22));
        stu.Add(new student("orange", 19));

        stu.Sort();
        Console.WriteLine("第一种方法");
        foreach (var item in stu)
        {
            Console.WriteLine(item.Name + " " + " " + item.Age);
        }

        //第二种方法
        stu.Sort(new stupara());
        Console.WriteLine("第二种方法");
        foreach (var item in stu)
        {
            Console.WriteLine(item.Name + " " + " " + item.Age);
        }
    }
 }

class student:IComparable<student>
{
    public student(string name, int age) { Name = name; Age = age; }
    public string Name;
    public int Age;

    public int CompareTo(student other)
    {
        if (this.Name!=other.Name)
        {
            return this.Name.CompareTo(other.Name);
        }
        else if (this.Age!=other.Age)
        {
            return this.Age.CompareTo(other.Age);
        }
        return 0;
    }
}

class stupara : IComparer<student>
{
    public int Compare(student x, student y)
    {
        if (x.Age != y.Age)
        {
            return x.Age.CompareTo(y.Age);
        }
        else if (x.Name != y.Name)
        {
            return x.Name.CompareTo(y.Name);
        }

        else
            return 0;
    }
}

c# sort,C#从入门到精通系列,c#

与第二种方法相比,第三种方法更好用,第三种方法可以将排序的类和方法类自由结合,无需要在定义元素类的时候将排序的方法载入。

第四种方法:通过委托类型

using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
class test 
{
    static void Main(string[] args)
    {

        //通过委托类型
        List<Point> pt = new List<Point>();
        pt.Add(new Point(2, 5));
        pt.Add(new Point(4, 2));
        pt.Add(new Point(3, 4));

        Console.WriteLine("第一种委托");
        pt.Sort(delegate (Point p1, Point p2)
       {
           return p1.X.CompareTo(p2.X);
       }
       );
        foreach (var item in pt)
        {
            Console.WriteLine(item.X + " " + " " + item.Y);
        }

        //P1,P2默认为pt列表中的类型
        pt.Sort((p1, p2) =>
        {
            if (p1.Y != p2.Y)
            {
                return p1.Y.CompareTo(p2.Y);
            }
            else if (p1.X != p2.X)
            {
                return p1.Y.CompareTo(p2.Y);
            }
            else
            {
                return 0;          
            }
        });

        Console.WriteLine("第二种委托类型");
        foreach (var item in pt)
        {
            Console.WriteLine(item.X + " " + " " + item.Y);
        }

    }
 }


class Point
{
    public Point(int x, int y) { X = x;Y = y; }
    public int X;
    public int Y;
}

 c# sort,C#从入门到精通系列,c#

通过委托方法传入sort排序方法是一种比较简单的方式,该种方法无需重新定义类,直接在主函数中即可使用。

参考文章:

(1条消息) C# List.Sort排序_c# list sort_Peter_Gao_的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-613809.html

到了这里,关于C#中sort排序相关用法介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现

    C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现

    在之前的文章C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现我介绍了单个异步Udp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步发送、异步接收的操作,那么这时候我们使用之前单个异步Udp客户

    2024年02月03日
    浏览(99)
  • C# Socket通信从入门到精通(12)——多个同步UDP客户端C#代码实现

    C# Socket通信从入门到精通(12)——多个同步UDP客户端C#代码实现

    我们在开发Udp客户端程序的时候,有时候在同一个软件上我们要连接多个服务器,这时候我们开发的一个客户端就不够使用了,这时候就需要我们开发出来的软件要支持连接多个服务器,最好是数量没有限制,这样我们就能应对任意数量的服务器连接,由于我们开发的Udp客户

    2024年02月04日
    浏览(44)
  • C#文件操作从入门到精通(1)——INI文件操作

    C#文件操作从入门到精通(1)——INI文件操作

    我们在开发c#的winform程序中,因为有些参数是不断变化的 ,所以经常需要开放一些参数提供给用户设置,通过操作Ini文件来保存我们设置的参数也是c#开发中经常使用的技术,本文就来详细介绍操作ini文件的以下功能: 1、读取ini文件,获取某个节点的某个键的值 2、写入in

    2024年02月14日
    浏览(11)
  • C#串口通信从入门到精通(14)——多个串口接收数据

    C#串口通信从入门到精通(14)——多个串口接收数据

    我们在开发串口通信程序时,有时候会需要连接不止一个串口,这时候该怎么写程序呢?本文就来介绍多个串口数据的接收 我们在之前的专栏中介绍了串口数据的发送,当时有提到过,我们是通过创建一个SerialPort类的对象,然后利用这个对象来实现对串口的访问,那么以此

    2024年02月05日
    浏览(94)
  • 手把手教你从入门到精通C# Socket通信

    手把手教你从入门到精通C# Socket通信

    Socket通信(包含Tcp/Udp通信)在工业领域用途非常广泛,作者在自动化领域耕耘多年,做过的Tcp/Udp通信的项目大大小小也有几百个,公司项目+兼职项目,可以说只要是Tcp/Udp的项目,没有我做不了的,毕竟让我徒手撸一个市面上你见到的Tcp/Udp调试助手对我而言也不在话下,比

    2024年03月17日
    浏览(40)
  • 手把手教你从入门到精通C# Modbus通信

    手把手教你从入门到精通C# Modbus通信

    在工业通信领域,Modbus通信是一种使用非常广泛的通信协议,Modbus一般有三种,分别为ModbusRTU、ModbusASCII、ModbusTCP,其中ModbusRTU、ModbusASCII是应用于串行链路上的协议,通俗一点就是说它是走串口的,ModbusTCP通俗点说就是它是走网口的,作者在自动化领域耕耘多年,做过的Mo

    2024年02月14日
    浏览(46)
  • C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

    C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

    我们在开发UDP通信程序时,有时候我们也需要开发UDP服务器程序,这个服务器只需要和一个客户端实现通信,比如这篇博文C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现,但是在实际项目中有的时候需要和多个客户端进行通信,这时和一个客

    2024年01月22日
    浏览(45)
  • C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现

    C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现

    我们在开发UDP通信程序时,除了开发UDP客户端程序,有时候我们也需要开发UDP服务器程序,这在实际项目中是经常会遇到的,所以说掌握UDP服务器程序的开发是一项必备的技能,尤其在上位机软件开发领域,掌握UDP服务器程序的开发是走向高级工程师的必经之路,也是面试必

    2024年02月03日
    浏览(41)
  • C# Modbus通信从入门到精通(22)——Modbus TCP(0x01功能码与C#代码实现)

    C# Modbus通信从入门到精通(22)——Modbus TCP(0x01功能码与C#代码实现)

    使用该功能码能从远程地址中读取1到2000个线圈的状态,每个线圈的状态只能是0或者1,读取的线圈数量由主站读取时指定。 MBAP报文头格式如下: 更详细的格式如下: MBAP报文头+功能码+起始地址高位+起始地址低位+线圈数量高位+线圈数量低位,一共12个字节。 更详细的格式

    2024年02月07日
    浏览(36)
  • C# Modbus通信从入门到精通(29)——Modbus TCP(0x10功能码与C#代码实现)

    C# Modbus通信从入门到精通(29)——Modbus TCP(0x10功能码与C#代码实现)

    使用该功能码能将多个保持寄存器的值写入到远程地址中 更详细的格式如下: MBAP报文头+功能码+寄存器起始地址高字节+寄存器起始地址低字节+寄存器数量高字节+寄存器数量低字节+字节计数(1个字节)+寄存器1高字节+寄存器1低字节+…+寄存器N高字节+寄存器N低字节+CRC,一

    2024年02月06日
    浏览(148)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包