C# 泛型List排序的实现
作者:廷益--飞鸟 发布时间:2021-09-22 07:03:16
标签:C#,泛型,List,排序
本文主要介绍了C# 泛型List排序的实现,分享给大家,具体如下:
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace L_List_sort
{
public class Person:IComparable<Person>
{
// 属性
public string name;
public int age;
// 构造
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
// 重写字符串
public override string ToString()
{
return "name: " + this.name + " age: " + this.age;
}
// 实现比较接口
public int CompareTo(Person other)
{
// 根据返回值排序 升序
if (this.age > other.age)
{ // 大于0 放后面
return 1;
}
else
{ // 小于 0 放前面
return -1;
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("泛型数组的排序");
#region 知识一 List自带排序方法
Console.WriteLine("--------------------List自带排序方法");
List<int> listInt = new List<int>();
listInt.Add(4);
listInt.Add(2);
listInt.Add(3);
listInt.Add(1);
Console.WriteLine("-------排序前");
PrintList<int>(listInt);
Console.WriteLine("-------排序后");
// 排序
listInt.Sort();
PrintList<int>(listInt);
#endregion
#region 知识二 自定义类的排序
Console.WriteLine("--------------------自定义类的排序");
List<Person> listPerson = new List<Person>();
listPerson.Add(new Person("张三", 20));
listPerson.Add(new Person("李四", 18));
listPerson.Add(new Person("王五", 31));
listPerson.Add(new Person("曹操", 45));
Console.WriteLine("-------排序前");
PrintList<Person>(listPerson);
Console.WriteLine("-------排序后");
// 继承排序(需要继承 接口 :IComparable<Person>)
listPerson.Sort();
PrintList<Person>(listPerson);
#endregion
#region 知识三 通过委托函数进行排序
Console.WriteLine("--------------------通过委托函数进行排序");
listPerson.Clear();
listPerson.Add(new Person("张三", 20));
listPerson.Add(new Person("李四", 18));
listPerson.Add(new Person("王五", 31));
listPerson.Add(new Person("曹操", 45));
Console.WriteLine("-------排序前");
PrintList<Person>(listPerson);
// 使用委托==>函数排序
listPerson.Sort(SortPerson);
Console.WriteLine("-------排序后");
PrintList<Person>(listPerson);
// Lambda 再次排序
listPerson.Sort((leftP, rightP) => {
return leftP.age > rightP.age ? 1 : -1;
});
Console.WriteLine("-------Lambda 再次排序后");
PrintList<Person>(listPerson);
#endregion
Console.ReadLine();
}
// 排序函数
private static int SortPerson(Person leftP, Person rightP)
{
// 根据返回值排序 升序
if (leftP.age > rightP.age)
{ // 大于0 放后面
return -1;
}
else
{ // 小于 0 放前面
return 1;
}
}
// 打印列表中元素的内容
private static void PrintList<T>(List<T> nList)
{
if (nList.Count == 0)
Console.WriteLine("--列表为空数据");
for (int i = 0; i < nList.Count; i++)
{
Console.WriteLine(nList[i].ToString());
}
}
}
}
来源:https://blog.csdn.net/weixin_45875105/article/details/124874474


猜你喜欢
- 一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,
- java中删除 数组中的指定元素要如何来实现呢,如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于java中删除 数组中的指定元素的例
- 要想充分发挥ADO.NET的优势,不仅需要全面、深入理解ADO.NET编程模型,及时总结经验、技巧也十分重要。ADO已经有多年的实践经验,A
- 以前的Android(4.1之前的版本)中,SDcard路径通过“/sdcard”或者“/mnt/sdcard”来表示,而在JellyBea
- 前言最近在阅读 .NET Threadpool starvation, and how queuing makes it worse 这篇博
- 概述Spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配
- 23种设计模式第七篇:java代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个
- 一、定义实体类Person,封装生成的数据package net.dc.test;public class Person { private
- 首先从表现层介绍,后续后深入原理。1、先简单介绍maven如何生成jar文件方便测试<plugin>
- 最近 IDEA 2020最后一个版本发布了 ,已经内置了Lombok插件,SpringBoot 2.1.x之后的版本也在Starter中内置
- 使用抽象类应该注意的几个要点:包含一个或者多个抽象方法的类必须被声明为抽象类. 将类声明为抽象类,不一定含有抽象方法.通常认为,在抽象类中不
- 使用@Autowired注解有错误提示使用Spring boot +mybatis框架时,在service实现类中使用Mapper类,给Ma
- 在开发中我们经常需要把我们的应用设置为全屏,有两种方法,一中是在代码中设置,另一种方法是在配置文件里改!一、在代码中设置:package c
- Java计算一段程序的运行时间介绍了两种方法,一种是毫秒级别的计算,另一种是更精确的纳秒级别的计算。毫秒级别计算时间  
- 本文实例为大家分享了C#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using System;using Syste
- 本文实例为大家分享了ActionBar实现tab导航效果的具体代码,供大家参考,具体内容如下先来说一说基础知识:一、基本使用方法1.获取Ac
- 在Web应用系统开发中,文件上传和下载功能是非常常用的
- 1. SpEL 回顾经过上篇文章的学习,小伙伴们已经知道了,在 Spring Security 中,@PreAuthorize、@PostA
- Java在控制台打印本月日历在学习《Java核心技术卷I·基础知识》第10版 的时候里面有一个小例子,就是在控制台上打印日历的一个例子,就想
- 本文实例讲述了C#类中static变量用法。分享给大家供大家参考。具体分析如下:先来看一段代码:using System; namespac