时间:2021-05-20
一、泛型集合List<T>排序
经sort方法之后,采用了升序的方式进行排列的。
List<int> list = new List<int>() { 2, 4, 1, 3, 5, -2, 0, 10 }; Console.Write("排序前..."); foreach (var item in list) { Console.Write(item + "\t"); } list.Sort(); Console.WriteLine(); Console.WriteLine("排序后..."); foreach (var item in list) { Console.Write(item + "\t"); }二、对自定义类型进行排序
定义一个普通类:
public class Person { public int Id { get; set; } public string Name { get; set; } }接下来,将定义的Person实例化,排序;
List<Person> list = new List<Person>() { new Person(){Name="张叁",Id=1}, new Person() {Name="李四",Id=4 }, new Person() {Name="王五",Id=2 }, }; list.Sort(); foreach (var item in list) { Console.Write(item.Id); }结果如下:
在int类型中实现了IComparable,所以可以通过Sort()直接排序;
int类型是实现了IComparable这个接口的。那么如果让自定义类型Person也可以排序,那么试试实现该接口;
那么将上面的代码修改一下看看
public class Person:IComparable { public int Id { get; set; } public string Name { get; set; } public int CompareTo(object obj) { Person p = obj as Person; return this.Id.CompareTo(p.Id); } }结果如下:
三、对集合按照多种不同规则进行排序
实际使用中,经常需要对集合按照多种不同规则进行排序,这就需要定义其他比较规则,可以在Compare方法中定义,该方法属于IComparer<T>泛型接口,请看下面的代码:
public class PersonNameDesc : IComparer<Person> { //存放排序器实例 public static PersonNameDesc NameDesc = new PersonNameDesc(); public int Compare(Person x, Person y) { return System.Collections.Comparer.Default.Compare(x.Name, y.Name); } }Compare方法的参数为要进行比较的两个同类型对象,返回值为int类型,返回值处理规则与CompareTo方法相同。其中的Comparer.Default返回一个内置的Comparer对象,用于比较两个同类型对象。
下面用新定义的这个比较器对集合进行排序:
//================对集合按照多种不同规则进行排序========================= List< Person > list = new List<Person>() { new Person(){Name="张叁",Id=1}, new Person() {Name="李四",Id=4 }, new Person() {Name="王五",Id=2 }, new Person() {Name="李四",Id=6 }, new Person() {Name="王五",Id=3 }, }; list.Sort(PersonNameDesc.NameDesc); foreach (var item in list) { Console.Write(item.Name + "\t"); } Console.Read();结果如下:
四、使用linq进行排序
sort方法的一个重载是Comparison<T>类型的参数;
那就看一下 Comparison<T>是怎么一回事吧:
List<Person> list = new List<Person>() { new Person(){Name="张叁",Id=1}, new Person() {Name="李四",Id=4 }, new Person() {Name="王五",Id=2 }, new Person() {Name="李四",Id=6 }, new Person() {Name="王五",Id=3 }, }; //匿名委托 list.Sort((a, b) => a.Id - b.Id); foreach (Person p in list) { Console.WriteLine(p.Name + "\t" + p.Id); } Console.Read();结果如下:
List<Person> list = new List<Person>() { new Person(){Name="张叁",Id=1}, new Person() {Name="李四",Id=4 }, new Person() {Name="王五",Id=2 }, new Person() {Name="李四",Id=6 }, new Person() {Name="王五",Id=3 }, }; var l = from p in list orderby p.Id descending select p; foreach (Person p in l) { Console.WriteLine(p.Name + "\t" + p.Id); } Console.Read();结果如下:
今天的分享就到这里了,好久没写过博客了,加班多,太忙了,抽空复习一下基础知识;
到此这篇关于C# 泛型集合的自定义类型排序的实现的文章就介绍到这了,更多相关C# 泛型集合的自定义类型排序内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例分析了C#泛型用法。分享给大家供大家参考。具体分析如下:这里演示如何创建具有单个类型参数的自定义泛型列表类,以及如何实现IEnumerable以便对列表
本文以实例形式讲述了C#通过反射创建自定义泛型的实现方法,分享给大家供大家参考。具体如下:比如有这样一个泛型:Demo.GenericsSimple我想要通过反
C#用户定义类型转换•用于自定义类和结构能够进行隐式转换和显示转换.例如:将一个自定义类类型转换成整型,浮点型等,反之亦然.C#提供隐式转换和显式转
C#泛型和数组在C#2.0中,下限为零的一维数组自动实现IList。这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的
一、#List泛型集合集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一。为什么要用泛型集合?在C#2.0之前,主要可以通过两种方式实现集