C# 关于列表List<T>排序总结与整理

一、概述

  • SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。
  • 排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。
    • 如果您使用索引访问各项,则它是一个动态数组(ArrayList).
    • 如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。

二、SortedList 类的方法和属性

常用的属性

属性描述
Capacity获取或设置 SortedList 的容量。
Count获取 SortedList 中的元素个数。
IsFixedSize获取一个值,表示 SortedList 是否具有固定大小。
IsReadOnly获取一个值,表示 SortedList 是否只读。
Item获取或设置与 SortedList 中指定的键相关的值。
Keys获取 SortedList 中的键。
Values获取 SortedList 中的值。

三、常用的方法

序号方法名描述
1public virtual void Add( object key, object value );向 SortedList 添加一个带有指定的键和值的元素。
2public virtual void Clear();从 SortedList 中移除所有的元素。
3public virtual bool ContainsKey( object key );判断 SortedList 是否包含指定的键。
4public virtual bool ContainsValue( object value );判断 SortedList 是否包含指定的值。
5public virtual object GetByIndex( int index );获取 SortedList 的指定索引处的值。
6public virtual object GetKey( int index );获取 SortedList 的指定索引处的键。
7public virtual IList GetKeyList();获取 SortedList 中的键。
8public virtual IList GetValueList();获取 SortedList 中的值。
9public virtual int IndexOfKey( object key );返回 SortedList 中的指定键的索引,索引从零开始。
10public virtual int IndexOfValue( object value );返回 SortedList 中的指定值第一次出现的索引,索引从零开始。
11public virtual void Remove( object key );从 SortedList 中移除带有指定的键的元素。
12public virtual void RemoveAt( int index );移除 SortedList 的指定索引处的元素。
13public virtual void TrimToSize();设置容量为 SortedList 中元素的实际个数。

四、实例

using System;
using System.Collections;namespace CollectionsApplication{class Program{static void Main(string[] args){SortedList sl = new SortedList();sl.Add("001", "Zara Ali");sl.Add("002", "Abida Rehman");sl.Add("003", "Joe Holzner");sl.Add("004", "Mausam Benazir Nur");sl.Add("005", "M. Amlan");sl.Add("006", "M. Arif");sl.Add("007", "Ritesh Saikia");if (sl.ContainsValue("Nuha Ali")){Console.WriteLine("This student name is already in the list");}else{sl.Add("008", "Nuha Ali");}// 获取键的集合 ICollection key = sl.Keys;foreach (string k in key){Console.WriteLine(k + ": " + sl[k]);}}}
}

当上面的代码被编译和执行时,它会产生下列结果:

001: Zara Ali
002: Abida Rehman
003: Joe Holzner
004: Mausam Banazir Nur
005: M. Amlan 
006: M. Arif
007: Ritesh Saikia
008: Nuha Ali

五、Sort

Sort 是 List<T> 自带的排序方法,其排序特性如下:

1、默认升序;

2、会改变原列表;

3、不稳定排序:相等元素的相对次序可能会改变。


方法一:常规

List<int> intList = new List<int> {4, 5, 1, 3, 2};// 升序
intList.Sort();  // 1 2 3 4 5// 降序(先升序,再反转)
intList.Sort();
intList.Reverse();  // 5 4 3 2 1

方法二:CompareTo

List<int> intList = new List<int> {4, 5, 1, 3, 2};// 升序
intList.Sort((x, y) => x.CompareTo(y));  // 1 2 3 4 5// 降序
intList.Sort((x, y) => y.CompareTo(x));  // 5 4 3 2 1

六、示例


自定义 Student 类

public class Student
{public string name {get; set;}public int age {get; set;}public int score {get; set;}
}

单属性排序

void dumpList(List<Student> stuList, string desc)
{Console.WriteLine(desc);foreach(var student in stuList){Console.Write("name = {0}, age = {1}, score = {2}", student.name, student.age, student.score);Console.WriteLine();}
}List<Student> stuList = new List<Student> {new Student() {name = "张三", age = 20, score = 95},new Student() {name = "李四", age = 19, score = 99},new Student() {name = "王五", age = 21, score = 95},new Student() {name = "赵六", age = 20, score = 90},new Student() {name = "陈七", age = 22, score = 95},new Student() {name = "刘八", age = 21, score = 92}
};dumpList(stuList, "-----原始列表-----");
// -----原始列表-----
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99
// name = 王五, age = 21, score = 95
// name = 赵六, age = 20, score = 90
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92stuList.Sort((x, y) => x.score.CompareTo(y.score));
dumpList(stuList, "-----按 score 属性升序-----");
// -----按 score 属性升序-----
// name = 赵六, age = 20, score = 90
// name = 刘八, age = 21, score = 92
// name = 张三, age = 20, score = 95
// name = 陈七, age = 22, score = 95
// name = 王五, age = 21, score = 95
// name = 李四, age = 19, score = 99stuList.Sort((x, y) => y.age.CompareTo(x.age));
dumpList(stuList, "-----按 age 属性降序-----");
// -----按 age 属性降序-----
// name = 陈七, age = 22, score = 95
// name = 王五, age = 21, score = 95
// name = 刘八, age = 21, score = 92
// name = 赵六, age = 20, score = 90
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99

嵌套排序

List<Student> stuList = new List<Student> {new Student() {name = "张三", age = 20, score = 95},new Student() {name = "李四", age = 19, score = 99},new Student() {name = "王五", age = 21, score = 95},new Student() {name = "赵六", age = 20, score = 90},new Student() {name = "陈七", age = 22, score = 95},new Student() {name = "刘八", age = 21, score = 92}
};dumpList(stuList, "-----原始列表-----");
// -----原始列表-----
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99
// name = 王五, age = 21, score = 95
// name = 赵六, age = 20, score = 90
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92stuList.Sort((x, y) => {int ret = y.score.CompareTo(x.score);if (ret == 0){return x.age.CompareTo(y.age);}else{return ret;}
});dumpList(stuList, "-----嵌套排序:按 score 降序,score 相同则按 age 升序-----");
// -----嵌套排序:按 score 降序,score 相同则按 age 升序-----
// name = 李四, age = 19, score = 99
// name = 张三, age = 20, score = 95
// name = 王五, age = 21, score = 95
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92
// name = 赵六, age = 20, score = 90

ps:

obj1.CompareTo(obj2) 返回值(int):

大于0(1):obj1 在 obj2 后面;
等于0(0):obj1 和 obj2 在同一位置;
小于0(-1):obj1 在 obj2 前面;


七、OrderBy/OrderByDescending


OrderBy/OrderByDescending (OrderBy升序,OrderByDescending降序)是通用的序列排序方法,其排序特性如下:

1、使用前必须先引入命名空间:System.Linq;

2、不会改变原列表;

3、稳定排序:相等元素的相对次序不会改变。

基本数据类型

List<int> intList = new List<int> {4, 5, 1, 3, 2};// 升序
intList = intList.OrderBy(x => x).ToList();  // 1 2 3 4 5// 降序
intList = intList.OrderByDescending(x => x).ToList();  // 5 4 3 2 1

单属性排序

List<Student> stuList = new List<Student> {new Student() {name = "张三", age = 20, score = 95},new Student() {name = "李四", age = 19, score = 99},new Student() {name = "王五", age = 21, score = 95},new Student() {name = "赵六", age = 20, score = 90},new Student() {name = "陈七", age = 22, score = 95},new Student() {name = "刘八", age = 21, score = 92}
};dumpList(stuList, "-----原始列表-----");
// -----原始列表-----
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99
// name = 王五, age = 21, score = 95
// name = 赵六, age = 20, score = 90
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92stuList = stuList.OrderBy(obj => obj.score).ToList();
dumpList(stuList, "-----按 score 属性升序-----");
// -----按 score 属性升序-----
// name = 赵六, age = 20, score = 90
// name = 刘八, age = 21, score = 92
// name = 张三, age = 20, score = 95
// name = 王五, age = 21, score = 95
// name = 陈七, age = 22, score = 95
// name = 李四, age = 19, score = 99stuList = stuList.OrderByDescending(obj => obj.age).ToList();
dumpList(stuList, "-----按 age 属性降序-----");
// -----按 age 属性降序-----
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92
// name = 王五, age = 21, score = 95
// name = 赵六, age = 20, score = 90
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99

嵌套排序

List<Student> stuList = new List<Student> {new Student() {name = "张三", age = 20, score = 95},new Student() {name = "李四", age = 19, score = 99},new Student() {name = "王五", age = 21, score = 95},new Student() {name = "赵六", age = 20, score = 90},new Student() {name = "陈七", age = 22, score = 95},new Student() {name = "刘八", age = 21, score = 92}
};dumpList(stuList, "-----原始列表-----");
// -----原始列表-----
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99
// name = 王五, age = 21, score = 95
// name = 赵六, age = 20, score = 90
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92stuList = stuList.OrderByDescending(obj => obj.score).ThenBy(obj => obj.age).ToList();
dumpList(stuList, "-----嵌套排序:按 score 降序,score 相同则按 age 升序-----");
// -----嵌套排序:按 score 降序,score 相同则按 age 升序-----
// name = 李四, age = 19, score = 99
// name = 张三, age = 20, score = 95
// name = 王五, age = 21, score = 95
// name = 陈七, age = 22, score = 95
// name = 刘八, age = 21, score = 92
// name = 赵六, age = 20, score = 90stuList = stuList.OrderBy(obj => obj.score).ThenByDescending(obj => obj.age).ToList();
dumpList(stuList, "-----嵌套排序:按 score 升序,score 相同则按 age 降序-----");
// -----嵌套排序:按 score 升序,score 相同则按 age 降序-----
// name = 赵六, age = 20, score = 90
// name = 刘八, age = 21, score = 92
// name = 陈七, age = 22, score = 95
// name = 王五, age = 21, score = 95
// name = 张三, age = 20, score = 95
// name = 李四, age = 19, score = 99

ps:

OrderBy/OrderByDescending 返回序列的类型为 IOrderedEnumerable<TSource>,可以用 ToList 将其转为列表!

即:

stuList = stuList.OrderBy(obj => obj.score).ToList();

=>

IOrderedEnumerable<Student> query = stuList.OrderBy(obj => obj.score);
stuList = query.ToList();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS给图片打水印,并将打过水印的图片生成到沙盒中

- (void)WaterImage{ UIImage *bgImage [UIImage imageNamed:"scene"]; // 上下文 : 基于位图(bitmap) , 所有的东西需要绘制到一张新的图片上去 // 1.创建一个基于位图的上下文(开启一个基于位图的上下文) // size : 新图片的尺寸 // opaq…

app inventor离线版_小鸡漫画app手机版下载_小鸡漫画好看的漫画手机版下载

小鸡漫画app手机版&#xff0c;是一款无限量看漫画的阅读软件。小鸡漫画app手机版为喜欢看漫画的用户带来超多好看、热门、经典的漫画集&#xff0c;在这里看漫画没有乱七八糟和漫画无关的东西打扰。小鸡漫画app手机版方便看漫画&#xff0c;让一个人的你不再孤单&#xff0c;午…

LeetCode 963. 最小面积矩形 II

文章目录1. 题目2. 解题1. 题目 给定在 xy 平面上的一组点&#xff0c;确定由这些点组成的任何矩形的最小面积&#xff0c;其中矩形的边不一定平行于 x 轴和 y 轴。 如果没有任何矩形&#xff0c;就返回 0。 示例 1&#xff1a; 输入&#xff1a;[[1,2],[2,1],[1,0],[0,1]…

C#中判断浮点数double/float是否相等

一、float型与零值比较的语句 if(x < -0.000001 && x > 0.000001) // !0 if(x > -0.000001 && x < 0.000001)// 0 二、float型与float型如何判断相等 浮点数的表示是不精确的&#xff0c;不能直接比较两个数是否完全相等&#xff0c;一般都是在…

树的存储结构(树的二叉链表(孩子—兄弟))

// c6-5.h 树的二叉链表(孩子—兄弟)存储结构(见图6.32) typedef struct CSNode {TElemType data;CSNode *firstchild,*nextsibling; }CSNode,*CSTree; 一棵树无论有多少叉&#xff0c;它最多有一个长子和一个排序恰在其下的兄弟。根据这样的定 义&#xff0c;则每个结点的结构…

C# 二维与三维计算多边形面积的方法

1、二维情况下&#xff0c;计算多边形面积 internal static float GetArea(List<Vector2> points) {float area2 0;for (int numPoint 0; numPoint < points.Count - 1; numPoint){MyPoint point points[numPoint];MyPoint nextPoint points[numPoint 1];area2 …

i12蓝牙耳机使用说明书图片_配置强悍、适用于开车、运动的蓝牙耳机Xisem西圣 Ares使用体验...

现在的蓝牙耳机市场五花八门、有降噪的、有高保真音质的、有适用于运动不掉的… … 真有是各出奇招。那么作为消费者应该如何选择呢&#xff1f;前段时间入手一款硬件配置很高、无论是开车&#xff0c;还是运动都适用的蓝牙耳机“Xisem西圣 Ares真无线蓝牙耳机”。包装简介&…

LeetCode 918. 环形子数组的最大和(前缀和+单调队列)

文章目录1. 题目2. 解题1. 题目 给定一个由整数数组 A 表示的环形数组 C&#xff0c;求 C 的非空子数组的最大可能和。 在此处&#xff0c;环形数组意味着数组的末端将会与开头相连呈环状。 &#xff08;形式上&#xff0c;当0 < i < A.length 时 C[i] A[i]&#xff0…

小案例:王者荣耀战力查询系统(免费调用外部接口

一、查询网址&#xff08;点击&#xff09;&#xff1a; 王者战力查询-王者战力排行榜 二、战力查询接口&#xff1a; 接口调用&#xff1a; https://www.jk.cxkf.cc/api_select.php参数&#xff1a; hero&#xff1a;英雄名字 type&#xff1a;qq、wx、ios_qq、ios_wxqq&…

open函数返回-1_4.6 linux的系统调用执行探究(1)

arm64大约支持280个系统调用&#xff0c;我们平时使用的这些系统调用&#xff0c;到底工作原理是什么&#xff0c;调用后又是到哪里实现的呢&#xff0c;这篇文章初步了解下内核系统调用的流程&#xff0c;并告诉跟踪这个流程的方法。废话不多说&#xff0c;如上就是linux的系统…

LeetCode 781. 森林中的兔子(哈希+贪心)

文章目录1. 题目2. 解题1. 题目 森林中&#xff0c;每个兔子都有颜色。 其中一些兔子&#xff08;可能是全部&#xff09;告诉你还有多少其他的兔子和自己有相同的颜色。 我们将这些回答放在 answers 数组里。 返回森林中兔子的最少数量。 示例: 输入: answers [1, 1, 2] 输…

4*4矩阵转换成二维平面坐标

一、需求&#xff1a;基于苹果数据4*4矩阵数据&#xff0c;转换成二维平面坐标系 二、解决方法与步骤&#xff1a; 用到的方法&#xff1a; 1、Matrix4的转化_Catirl的博客-CSDN博客 2、平面内直角坐标系中坐标旋转变换公式_Eric_Wangyz的博客-CSDN博客_坐标旋转变换公式 …

C#操作Excel(1)Excel对象模型

Excel对象模型 &#xff08;.Net Perspective&#xff09; 本文主要针对在Visual Studio中使用C# 开发关于Excel的应用程序 本文的PDF下载地址&#xff1a;C#操作Excel2007.pdf 来源&#xff1a;Understandingthe Excel Object Model from a .NET Developers Perspective Exce…

蓝牙适配器 能同时接多少个设备_便携音箱也能有立体环绕声,JVC智能蓝牙颈挂音箱体验...

说起音箱&#xff0c;相信音乐爱好者是很熟悉了&#xff0c;而随着蓝牙技术的不断发展&#xff0c;便携式蓝牙音箱开始受到越来越多用户的喜爱&#xff0c;它能够让我们摆脱线材束缚&#xff0c;随时随地畅享音乐。虽然便携式蓝牙音箱小巧易携带&#xff0c;音质方面也在不断提…

LeetCode 1156. 单字符重复子串的最大长度

文章目录1. 题目2. 解题1. 题目 如果字符串中的所有字符都相同&#xff0c;那么这个字符串是单字符重复的字符串。 给你一个字符串 text&#xff0c;你只能交换其中两个字符一次或者什么都不做&#xff0c;然后得到一些单字符重复的子串。 返回其中最长的子串的长度。 示例 …

☆☆在Eclipse中编译NDK的so文件(普通安卓项目转换为NDK项目的设定)

1 将Native的编译链接配置加入项目中 2 进行编译 3 项目支持Native后&#xff0c;在首尾分别新增了两个编译过程 转载于:https://www.cnblogs.com/YangBinChina/p/3937287.html

小案例:利用图床自动化批量上传图片并获取图片链接

一、前言&#xff1a; 用python爬虫写了一个小脚本&#xff0c;用来自动上传图片到图床&#xff0c;然后返回链接&#xff0c;我们只需直接复制链接就可以。&#xff08;需要安装Requests库&#xff09;因为不同图床需要提交的POST表单不一致&#xff0c;所以在这里我用ImgURL…

LeetCode 497. 非重叠矩形中的随机点(前缀和+二分查找)

文章目录1. 题目2. 解题1. 题目 给定一个非重叠轴对齐矩形的列表 rects&#xff0c;写一个函数 pick 随机均匀地选取矩形覆盖的空间中的整数点。 提示&#xff1a; 整数点是具有整数坐标的点。 矩形周边上的点包含在矩形覆盖的空间中。 第 i 个矩形 rects [i] [x1&#xff0…

win10蓝屏提示重新启动_电脑蓝屏五大要素,秒判蓝屏问题及处理!

电脑蓝屏是个老生常谈的问题&#xff0c;而蓝屏问题也是电脑问题中最为复杂的问题之一&#xff0c;别说电脑小白&#xff0c;就是电脑老鸟有时候面对蓝屏都会犯怵&#xff01;简单来说&#xff0c;电脑蓝屏就好像人类突然晕倒&#xff0c;或者最严重的情况直接死亡&#xff0c;…

小案例:利用Python获取Windows电脑WiFi密码

一、需求&#xff1a; 电脑上忘记wifi密码&#xff0c;直接用命令行便可查看所有的wifi密码 二、逻辑&#xff1a; 1、提取windows上所有的wifi名称 2、每一个wifi的信息存储在一个字典里 3、判断wifi密码是否存储在windows计算机里&#xff0c;不存在则忽略 4、密码存在…