C# 泛型集合的自定义类型排序的实现
作者:Tulip123 发布时间:2022-11-18 20:35:32
标签:C#,泛型,排序
一、泛型集合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();
结果如下:
今天的分享就到这里了,好久没写过博客了,加班多,太忙了,抽空复习一下基础知识;
来源:https://www.cnblogs.com/guhuazhen/p/13972430.html
0
投稿
猜你喜欢
- RestTemplate未设置超时时间,导致RabbitMQ队列大量堆积,消费者假死,不进行消费,类似线程堵塞。排查:从日志排查问题,在从进
- 本文实例讲述了C#中Memcached缓存的用法,分享给大家供大家参考。具体方法如下:ICacheStrategy.cs文件如下:publi
- 用户提出一个需求:当修改产品价格的时候,需要记录操作日志,什么时候做了什么事情。想必这个案例,只要是做过应用系统的小伙伴们,都应该遇到过吧?
- java 弹幕小游戏的最初版本,供大家参考,具体内容如下最近在学习javaSE,根据b站视频老师的讲解,也参考了他的代码,做了一个弹幕小游戏
- 众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。1.split()+正则表达式来进行截取。 将正则传入split()。
- 一.WebSocket简单介绍WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-d
- 在使用jsoup爬取其他网站数据的时候,发现class是带空格的多选择,如果直接使用doc.getElementsByClass(“clas
- 不管eclipse有没有被被时代抛弃,反正是被我抛弃了,因为IDEA是真的好用现在公司的项目基本都是基于maven的多module项目,co
- 本文实例讲述了Android编程开发之TextView单击链接弹出Activity的方法。分享给大家供大家参考,具体如下:话不多说直接上码:
- 1、String 是最基本的数据类型吗?不是。Java 中的基本数据类型只有 8 个 :byte、short、int、long、float、
- 一,网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中I
- Java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化,动态初始化:指定长度,由系统给出初始化值静态初始化:给出初始化值,由系统
- 本文实例讲述了简单记事本java实现代码。分享给大家供大家参考。具体如下:完整代码如下:import java.awt.*;import j
- 有时候,我们需要把对象A的所有值复制给对象B(B = A),但是这样用等号给赋值你会发现,当B中的某个对象值改变时,同时也会修改到A中相应对
- 判断某字符串是否为空,为空的标准是str==null或str.length()==01.下面是StringUtils判断是否为空的示例:St
- 前言出去面试的时候,对java的集合框架考察的知识点还是蛮多的。除了基础的集合常见API使用,对集合底层的实现原理以及数据结构等也有很多考察
- 概述 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBr
- 本文实例为大家分享了java实现五子棋程序的具体代码,供大家参考,具体内容如下知识点1、Swing 编程2、ImageIO 类的使用3、图片
- SpringBoot JPA分页查询指定列并返回指定实体用习惯Mybatis,没用过jpa 真是各种踩坑了脑壳疼,一个分页弄老半天,原来就一
- 一、什么是 javabean ?在jsp页面中,包含html代码、css代码、java代码、以及业务逻辑处理代码等。javabean的作用就