C#使用IComparer自定义List类实现排序的方法
程序员文章站
2023-08-17 17:01:14
本文实例讲述了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#程序设计有所帮助。