当前位置: 首页 > 编程笔记 >

C#通过IComparable实现ListT.sort()排序

施权
2023-03-14
本文向大家介绍C#通过IComparable实现ListT.sort()排序,包括了C#通过IComparable实现ListT.sort()排序的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了C#通过IComparable实现ListT.sort()排序的方法,分享给大家供大家参考之用。具体方法如下:

通常来说,List<T>.sort()可以实现对T的排序,比如List<int>.sort()执行后集合会按照int从小到大排序。如果T是一个自定义的Object,可是我们想按照自己的方式来排序,那该怎么办呢,其实可以用过IComparable接口重写CompareTo方法来实现。流程如下:

一、第一步我们申明一个类Person但是要继承IComparable接口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestIComparable
{
  public class Person : IComparable<Person>
  {
    public string Name { get; set; }
 
    public int Age { get; set; }
 
    public int CompareTo(Person obj)
    {
      int result;
      if (this.Name == obj.Name && this.Age == obj.Age)
      {
        result = 0;
      }
      else
      {
        if (this.Name.CompareTo(obj.Name) > 0)
        {
          result = 1;
        }
        else if (this.Name == obj.Name && this.Age > obj.Age)
        {
          result = 1;
        }
        else
        {
          result = -1;
        }
      }
 
      return result;
    }
 
    public override string ToString()
    {
      return this.Name + "-" + this.Age;
    }
  }
}

二、然后在主函数里面调用sort方法即可.类就会按照姓名从小到大,如果姓名相同则按照年龄从小到大排序了。

public class Program
{
  public static void Main(string[] args)
  {
    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();
    Console.ReadKey();
  }
}

三、如果不继承IComparable接口,我们该如何实现排序呢。可以使用Linq来实现。其实效果是一样的,只是如果类的集合要经常排序的话,建议使用继承接口的方法,这样可以简化sort的代码,而且更容易让人看懂。

public static void Main(string[] args)
{
  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((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;
  });
  Console.ReadKey();
}

希望本文所述对大家的C#程序设计有所帮助。

 类似资料:
  • 你的类型需要排序关系用于定义集合的排序和搜索。 .NET 框架定义两个接口描述类型的排序关系: IComparable<T> 和 IComparer<T> 。IComparable 定义了类型的自然排序。类型实现的 IComparer 描述的另一个排序。你可以在接口中提供具体类型的比较并避免运行时低效率的自定义关系操作符( < ,>,<=,>= )的实现。本原则会讨论怎么实现排序关系,.NET 核

  • 本文向大家介绍通过c++的sort函数实现成绩排序功能,包括了通过c++的sort函数实现成绩排序功能的使用技巧和注意事项,需要的朋友参考一下 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n*log2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include<algorithm>的c++标准库中。 题目描述

  • 本文向大家介绍C#通过yield实现数组全排列的方法,包括了C#通过yield实现数组全排列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#通过yield实现数组全排列的方法。分享给大家供大家参考。具体分析如下: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。 希望本文所述对大家的C#

  • 本文向大家介绍C++实现位图排序实例,包括了C++实现位图排序实例的使用技巧和注意事项,需要的朋友参考一下 在《编程珠玑》一书里提到了一种算法导论里没有提到过的位图排序方法,这种排序方法是通过牺牲空间效率来追求时间效率(线性时间)以达到时间-空间折中与双赢的目的。本文以实例形式简单讲一下位图排序思想。 一、问题描述      1.输入:一个至多包含1千万个非负整数的文件      2.特征:①每个

  • 本文向大家介绍C++实现选择排序(selectionSort),包括了C++实现选择排序(selectionSort)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现选择排序的具体代码,供大家参考,具体内容如下 一、思路 每次取剩下没排序的数中的最小数,然后,填到对应位置。(可以使用a[0]位置作为暂存单元) 如下: 二、实现程序 测试数据: 7 20 12 50 70 2

  • 本文向大家介绍C++ 通过指针实现多态实例详解,包括了C++ 通过指针实现多态实例详解的使用技巧和注意事项,需要的朋友参考一下  C++ 通过指针实现多态实例详解 1.父类(DBConnector) 1)DBConnector.h 2)DBConnector.cpp 2.子类1(MySqlConnector) 1)MSSqlConnector.h 2)MSSqlConnector.cpp 3.子类