【C#】 自定义类的比较/排序—IComparer接口、IComparable接口

排序

数组

https://learn.microsoft.com/en-us/dotnet/api/system.array.sort?view=net-7.0

using System;
Array.Sort(Array); //使用默认比较器
Array.Sort(Array, IComparer); //使用自定义比较器

定义一个比较器类MySort,继承IComparer接口实现Compare方法,将实例传入Sort函数:

返回值1,将y放在x的左侧
-1将y放在x的右侧
1保持位置不变
不知道怎么写返回值时,写一个调试一下就知道,错了改一下就行。

class mySort: IComparer
{
#region IComparer Members
public int Compare(object x, object y)
{
Student s1 = x as Student;
Student s2 = y as Student;
//return s1.Name.CompareTo(s2.Name); //默认CompareTo为升序
if(s1.Age < s2.Age)
return 1; //将s2放在s1的左侧,这里s2.Age>s1.Age,所以按Age降序
else if(s1.Age == s2.Age)
return 0;
else
return -1;
}
#endregion
}
static void Main(string[] args)
{
Person[] p = new Person[]{
new Person(10,"zhang"),
new Person(30,"wang"),
new Person(40,"fang"),
new Person(20,"lang"),
};
Array.Sort(p, new MySort());
foreach(var ii in p){
Console.WriteLine($"age={ii.Age},name={ii.Name}");
}
}
class MySort: IComparer
{
#region IComparer Members
public int Compare(object x, object y)
{
Person s1 = x as Person;
Person s2 = y as Person;
if(s1.Age < s2.Age)
return 1;
else if(s1.Age==s2.Age)
return 0;
else
return -1;
}
#endregion
}
public class Person
{
public int Age{set;get;}
public string Name{set;get;}
public Person(int a, string n){
this.Age=a;
this.Name=n;
}
}

定义数据类型时继承IComparable接口实现CompareTo方法

这时该数据类型的集合,调用Sort()排序时将按照CompareTo方法指定排序规则进行排序。
int、string、object类型可用CompareTo方法,默认升序。

public class Person:IComparable
{
public int Age{set;get;}
public string Name{set;get;}
public Person(int a, string n)
{
this.Age=a;
this.Name=n;
}
public int CompareTo(object oo)
{
Person pp = oo as Person;
if (Age < pp.Age)
{
return -1;
}
else if (Age == pp.Age)
{
return 0;
}
else
{
return 1;
}
//return this.Age.CompareTo(pp.Age); //Int.CompareTo()默认升序
}
}

List

using System.Collections.Generic;
Sort(); //使用默认比较器
Sort(IComparer<T>); //使用自定义比较器
List<Person> ll = new List<Person>();
ll.Add(new Person(10,"zhang"));
ll.Add(new Person(20,"wang"));
ll.Add(new Person(30,"fang"));
ll.Add(new Person(40,"lang"));
ll.Sort();
posted @   徘徊彼岸花  阅读(499)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示