欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#使用IComparer自定义List类实现排序的方法

程序员文章站 2023-11-30 10:28:46
本文实例讲述了c#使用icomparer自定义list类实现排序的方法。分享给大家供大家参考。具体如下: list类中不带参数的sort函数可以用来为list类中的元素排...

本文实例讲述了c#使用icomparer自定义list类实现排序的方法。分享给大家供大家参考。具体如下:

list类中不带参数的sort函数可以用来为list类中的元素排序,但如果list类中的元素类型本身不能直接进行比较(如自定义的struct和很多class),或是希望采用更加灵活的自定义比较方式,可以通过继承了icomparer接口的函数来解决。

代码示例如下:

1)声明一个类

/// <summary>
/// 人物类
/// </summary>
public class person
{
  public string name;
  public int age;
  public override string tostring()
  {
    return "name: " + name + " age: " + age;
  }
}

2)声明一个继承了接口icomparer的类

/// <summary>
/// 比较人物类实例大小,实现接口icomparer
/// </summary>
public class personcomparer : icomparer<person>
{
  public int compare(person x, person y)
  {
    if (x == null && y == null) return 0;
    if (x == null) return -1;
    if (y == null) return 1;
    //todo:person类实例x与y的比较规则
    //按姓名由小到大排列,姓名相同的人年龄大的在前
    {
      int temp = string.compare(x.name, y.name);
      if (temp > 0) return -1;
      else if (temp < 0) return 1;
      if (x.age > y.age) return 1;
      if (x.age < y.age) return -1;
    }
    return 0;
  }
}

3)main函数,建立一个list,并使用刚建立的personcomparer类中的规则对list进行排序

static void main(string[] args)
{
  list<person> a = new list<person>();
  a.add(new person() { name = "tsybius", age = 23 });
  a.add(new person() { name = "galatea", age = 21 });
  a.add(new person() { name = "lucius", age = 22 });
  a.add(new person() { name = "septimus", age = 22 });
  a.add(new person() { name = "octavius", age = 22 });
  a.add(new person() { name = "lucius", age = 24 });
  //输出a中全部元素
  console.writeline("排序前");
  foreach (var v in a)
  {
    console.writeline(v.tostring());
  }
  console.writeline("-");
  //对a进行排序
  a.sort(new personcomparer());
  //输出a中全部元素
  console.writeline("排序后");
  foreach (var v in a)
  {
    console.writeline(v.tostring());
  }
  console.writeline("-");
  console.readline();
}

4)程序运行示例

C#使用IComparer自定义List类实现排序的方法

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