C#基礎(chǔ)教程之IComparable用法,實(shí)現(xiàn)List<T>.sort()排序
List<T>.sort()可以實(shí)現(xiàn)對(duì)T的排序,比如List<int>.sort()執(zhí)行后集合會(huì)按照int從小到大排序。如果T是一個(gè)自定義的Object,可是我們想按照自己的方式來(lái)排序,那該怎么辦呢,其實(shí)可以用過(guò)IComparable接口重寫(xiě)CompareTo方法來(lái)實(shí)現(xiàn)。流程如下:
一.第一步我們申明一個(gè)類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方法即可.類就會(huì)按照姓名從小到大,如果姓名相同則按照年齡從小到大排序了。
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接口,我們?cè)撊绾螌?shí)現(xiàn)排序呢??梢允褂肔inq來(lái)實(shí)現(xiàn)。其實(shí)效果是一樣的,只是如果類的集合要經(jīng)常排序的話,建議使用繼承接口的方法,這樣可以簡(jiǎn)化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#中List<T>對(duì)象的深度拷貝問(wèn)題
- C#中將DataTable轉(zhuǎn)化成List<T>的方法解析
- C#常見(jiàn)的幾種集合 ArrayList,Hashtable,List<T>,Dictionary<K,V> 遍歷方法對(duì)比
- C#將DataTable轉(zhuǎn)化為L(zhǎng)ist<T>
- C# List<T> Contains<T>()的用法小結(jié)
- 關(guān)于C#泛型列表List<T>的基本用法總結(jié)
- C# List<T>的用法小結(jié)
- C#中IList<T>與List<T>的區(qū)別深入解析
- C# 如何實(shí)現(xiàn)一個(gè)帶通知的List<T>
相關(guān)文章
c#入門之分支語(yǔ)句使用方法(三元運(yùn)算符、if語(yǔ)句、switch語(yǔ)句)
這篇文章主要介紹了c#入門之分支語(yǔ)句使用方法,包括三元運(yùn)算符、if語(yǔ)句、switch語(yǔ)句,需要的朋友可以參考下2014-04-04visio二次開(kāi)發(fā)--判斷文檔是否已發(fā)生變化(變化就加星號(hào)*)
最近做一個(gè)故障樹(shù)診斷的項(xiàng)目,用visio二次開(kāi)發(fā),可以同時(shí)打開(kāi)多個(gè)繪制的故障樹(shù)圖形文檔。項(xiàng)目中需要實(shí)現(xiàn)判斷文檔是否發(fā)生變化,這是很多編輯軟件的基本功能,變化了就加個(gè)星號(hào)*2013-04-04C#實(shí)現(xiàn)的4種常用數(shù)據(jù)校驗(yàn)方法小結(jié)(CRC校驗(yàn),LRC校驗(yàn),BCC校驗(yàn),累加和校驗(yàn))
本文主要介紹了C#實(shí)現(xiàn)的4種常用數(shù)據(jù)校驗(yàn)方法小結(jié)(CRC校驗(yàn),LRC校驗(yàn),BCC校驗(yàn),累加和校驗(yàn)),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C#?EF?Core可視化工具的使用及EF?Core入門語(yǔ)句操作代碼
EF?Core?可用作對(duì)象關(guān)系映射程序?(O/RM),以便于?.NET?開(kāi)發(fā)人員能夠使用?.NET?對(duì)象來(lái)處理數(shù)據(jù)庫(kù),這樣就不必經(jīng)常編寫(xiě)大部分?jǐn)?shù)據(jù)訪問(wèn)代碼了,接下來(lái)通過(guò)本文給大家介紹C#?EF?Core可視化工具的使用及EF?Core入門語(yǔ)句,感興趣的朋友一起看看吧2022-02-02C#添加Windows服務(wù) 定時(shí)任務(wù)
這篇文章主要為大家詳細(xì)介紹了C#添加Windows服務(wù),定時(shí)任務(wù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01