C#基礎(chǔ)教程之IComparable用法,實現(xiàn)List<T>.sort()排序
List<T>.sort()可以實現(xiàn)對T的排序,比如List<int>.sort()執(zhí)行后集合會按照int從小到大排序。如果T是一個自定義的Object,可是我們想按照自己的方式來排序,那該怎么辦呢,其實可以用過IComparable接口重寫CompareTo方法來實現(xiàn)。流程如下:
一.第一步我們申明一個類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;
}
}
}
二.然后在主函數(shù)里面調(diào)用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接口,我們該如何實現(xiàn)排序呢。可以使用Linq來實現(xiàn)。其實效果是一樣的,只是如果類的集合要經(jīng)常排序的話,建議使用繼承接口的方法,這樣可以簡化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();
}
相關(guān)文章
c#入門之分支語句使用方法(三元運(yùn)算符、if語句、switch語句)
這篇文章主要介紹了c#入門之分支語句使用方法,包括三元運(yùn)算符、if語句、switch語句,需要的朋友可以參考下2014-04-04visio二次開發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號*)
最近做一個故障樹診斷的項目,用visio二次開發(fā),可以同時打開多個繪制的故障樹圖形文檔。項目中需要實現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個星號*2013-04-04C#實現(xiàn)的4種常用數(shù)據(jù)校驗方法小結(jié)(CRC校驗,LRC校驗,BCC校驗,累加和校驗)
本文主要介紹了C#實現(xiàn)的4種常用數(shù)據(jù)校驗方法小結(jié)(CRC校驗,LRC校驗,BCC校驗,累加和校驗),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03C#?EF?Core可視化工具的使用及EF?Core入門語句操作代碼
EF?Core?可用作對象關(guān)系映射程序?(O/RM),以便于?.NET?開發(fā)人員能夠使用?.NET?對象來處理數(shù)據(jù)庫,這樣就不必經(jīng)常編寫大部分?jǐn)?shù)據(jù)訪問代碼了,接下來通過本文給大家介紹C#?EF?Core可視化工具的使用及EF?Core入門語句,感興趣的朋友一起看看吧2022-02-02