国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#通過IComparable實現ListT.sort()排序

2020-01-24 02:23:34
字體:
來源:轉載
供稿:網友

本文實例講述了C#通過IComparable實現ListT.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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福清市| 镇江市| 淄博市| 阜城县| 会泽县| 金塔县| 尉犁县| 大悟县| 禄劝| 济源市| 沿河| 白城市| 罗山县| 宁夏| 抚宁县| 宁波市| 林甸县| 东台市| 泰来县| 微博| 富源县| 鹰潭市| 神木县| 乐昌市| 宜丰县| 澄迈县| 长乐市| 永修县| 平泉县| 大宁县| 大同县| 涿鹿县| 永靖县| 和田县| 阜康市| 双牌县| 辽阳市| 宜宾县| 满洲里市| 固原市| 颍上县|