C#基础教程之IComparable用法,实现List<T>.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#入门之分支语句使用方法(三元运算符、if语句、switch语句)
这篇文章主要介绍了c#入门之分支语句使用方法,包括三元运算符、if语句、switch语句,需要的朋友可以参考下2014-04-04visio二次开发--判断文档是否已发生变化(变化就加星号*)
最近做一个故障树诊断的项目,用visio二次开发,可以同时打开多个绘制的故障树图形文档。项目中需要实现判断文档是否发生变化,这是很多编辑软件的基本功能,变化了就加个星号*2013-04-04C#实现的4种常用数据校验方法小结(CRC校验,LRC校验,BCC校验,累加和校验)
本文主要介绍了C#实现的4种常用数据校验方法小结(CRC校验,LRC校验,BCC校验,累加和校验),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-03-03C# EF Core可视化工具的使用及EF Core入门语句操作代码
EF Core 可用作对象关系映射程序 (O/RM),以便于 .NET 开发人员能够使用 .NET 对象来处理数据库,这样就不必经常编写大部分数据访问代码了,接下来通过本文给大家介绍C# EF Core可视化工具的使用及EF Core入门语句,感兴趣的朋友一起看看吧2022-02-02
最新评论