C# 对列表中的元素的多个属性进行排序

目录

前言

在开发过程中,我们经常需要 根据列表中的元素的某个属性进行排序,下面我们将简单介绍常用的排序函数。

例如此处有一个类,拥有的元素为编号和值

csharp 复制代码
public class Example
{
	public int Number;
	public int Value;
}

一、OrderBy、OrderByDescending、ThenBy、ThenByDescending

此时若我们想对此列表进行排序,将此类以编号为基准进行升序或者降序:

csharp 复制代码
//默认此时已经有一个有元素的List<Example>名为ExampleList
ExampleList = ExampleList.OrderBy(classInfo => classInfo.Number).ToList();//升序
ExampleList = ExampleList.OrderByDescending(classInfo => classInfo.Number).ToList();//降序

这样我们就已经把此类以编号为基准进行了升序降序排列,若此时列表中有相同的编号,列表则会根据索引自动进行二次排列。但是若我们想通过自己的标准进行二次排列,例如按照Value的大小对此时的列表进行二次排列。则可以:

csharp 复制代码
//二次升序排列
ExampleList = ExampleList.OrderBy(classInfo => classInfo.Number).ThenBy(classInfo => classInfo.Value).ToList();

//二次降序排列
ExampleList = ExampleList.OrderBy(classInfo => classInfo.Number).ThenByDescending(classInfo => classInfo.Value).ToList();

我们可以在升序或降序之后,再次进行多次的 ThenBy 或者是 ThenByDescending 来进行对一个类的不同属性的多次排列。

使用此方法对类型枚举筛选后再去筛选类型中的其他数值进行排序也是一种非常实用的方式,可以快速完成对列表的排列。

二、Sort

Sort 无返回值,直接对列表中的元素进行排序

csharp 复制代码
ExampleList.Sort((x,y)=> { return x.Number.CompareTo(y.Number); });//升序排列
ExampleList.Sort((x,y)=> { return -x.Number.CompareTo(y.Number); });//降序排列

// 升序排序
ExampleList.Sort((arg1,arg2)=> {
	//返回值含义:
	//大于0:arg1放在arg2的后面
	//等于0:保持当前的位置不变
	//小于0:arg1放在arg2的前面
	if (arg1.Number> arg2.Number){
		return 1;
	}else{
		return -1;
	}
});


// 先根据Number升序排序,如果Number相等,再按照Value进行降序排序
ExampleList.Sort((arg1,arg2)=> {
	//返回值含义:
	//大于0:arg1放在arg2的后面
	//等于0:保持当前的位置不变
	//小于0:arg1放在arg2的前面
	if (arg1.Number > arg2.Number){
		return 1;//升序
	}else if (arg1.Number == arg2.Number){//若Number相等,再按照Value进行排序
		if (arg1.Value > arg2.Value){
			return -1;//降序
		}else if (arg1.Value < arg2.Value ){
			return 1;
		}else{
			return 0;
		}
	}else{
		return -1;
	}
});
相关推荐
R-G-B25 分钟前
【12】大恒相机SDK C#开发 ——多相机开发,枚举所有相机,并按配置文件中的相机顺序 将所有相机加入设备列表,以便于对每个指定的相机操作
c#·大恒相机sdk·大恒多相机开发·大恒多相机枚举·大恒多相机指定顺序
R-G-B28 分钟前
【13】大恒相机SDK C#开发 —— Fom1中实时处理的8个图像 实时显示在Form2界面的 pictureBox中
c#·大恒相机sdk·图像实时显示在另一个界面
年少无知且疯狂1 小时前
【Unity】实现小地图
unity·游戏引擎
AA陈超2 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 #06-11:游戏后效果执行
c++·游戏·ue5·游戏引擎·虚幻
徐子竣6 小时前
[学习记录]Unity-Shader-常量缓冲区(CBUFFER)
学习·unity·游戏引擎
大飞pkz6 小时前
【Unity】Application类常见路径
unity·游戏引擎·游戏开发·application常用路径·数据路径·数据存储位置
向宇it6 小时前
【unity小技巧】封装一套 Unity 的植物生长系统
游戏·unity·c#·游戏引擎
NFA晨曦8 小时前
力扣刷题日常(7-8)
算法·leetcode·c#
踏上青云路8 小时前
C# 闭包
java·前端·c#
86Eric8 小时前
C# 入门教程(四)委托详解
c#·委托·多播委托