C#List的排序和简单去重总结
时间:2022-04-22
本文章向大家介绍C#List的排序和简单去重总结,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
List集合在开发过程中很常见,经常我们要对该集合进行一系列操作,本文介绍如何将该集合内的元素进行排序,博主制作简单WinForm应用程序进行演示。
首先,我们来看一下c#泛型List提供的Sort方法: 这里有泛型List类的Sort方法的三种形式,分别是 1,不带有任何参数的Sort方法----Sort();
这种排序List中的元素必须继承IComparable接口,并且要实现IComparable接口中的CompareTo()方法,在CompareTo()方法中要实现比较规则。
Int32和Double都是实现了IComparable接口并重载了CompareTo方法的结构。因此List<int>就可以直接进行排序。
2,带有比较器参数的Sort方法 ----Sort(IComparer<T>)
此种排序方法必须另外写一个额外的比较器类,该类必须实现IComparer接口,因为该接口有用于比较的重载函数Compare,所以我们必须实现它来完成自己希望的比较,例如自己定义一个学生类Student,改类中有ID、姓名、年龄等属性,我们可以选择年龄属性作为排序属性
3,带有比较器参数,可以指定排序范围的Sort方法----Sort(Int32, Int32 IComparer(T))
界面:
自己定义的比较器类:
public class IntCompare:IComparer<int>
{
/// <summary>
/// 自定义比较规则(从大到小)
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public int Compare(int x, int y)
{
//假设原来x位于y的前面,由于x<y 索引值变为1,即索引发生了改变所以推理此比较器是从大到小
if (x < y)
{
return 1;
}
else
{
return -1;
}
}
}
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication30
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 创建全局数据集合,用来进行一系列比较
/// </summary>
List<int> dataList = new List<int>();
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Load(object sender, EventArgs e)
{
this.GetData();
}
/// <summary>
/// 构造测试数据
/// </summary>
/// <returns></returns>
private void GetData()
{
dataList.Clear();
Random rm = new Random();
for (int i = 0; i < 7; i++)
{
this.dataList.Add(rm.Next(0, 20));
}
this.richTextBox1.Text = string.Join(",", this.dataList.ToArray());
}
/// <summary>
/// 刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRefresh_Click(object sender, EventArgs e)
{
this.richTextBox2.Clear();
this.richTextBox4.Clear();
this.richTextBox3.Clear();
this.GetData();
}
/// <summary>
/// 默认排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDefault_Click(object sender, EventArgs e)
{
this.dataList.Sort();
this.richTextBox2.Text = string.Join(",", this.dataList.ToArray());
}
/// <summary>
/// 自定义排序(从大到小)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnCustom_Click(object sender, EventArgs e)
{
IntCompare compare = new IntCompare();
this.dataList.Sort(compare);
this.richTextBox3.Text = string.Join(",", this.dataList.ToArray());
}
/// <summary>
/// 去重
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDistinct_Click(object sender, EventArgs e)
{
List<int>distinctList= this.dataList.Distinct().ToList();
this.dataList.Clear();
this.dataList.AddRange(distinctList);
this.richTextBox1.Text = string.Join(",", this.dataList.ToArray());
}
/// <summary>
/// 自定义排序部分排序(从大到小)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
IntCompare compare = new IntCompare();
//只对索引3开始的2个包括自己进行排序
this.dataList.Sort(3,2,compare);
this.richTextBox4.Text = string.Join(",", this.dataList.ToArray());
}
}
}
演示:
- 详解 常量指针和指针常量
- python 列表 总结
- 详解c++指针的指针和指针的引用
- QTableView 一列添加两个按钮
- [个人翻译]Redis 集群教程(上)
- Docker实践--部署Nodejs应用
- 【权限的思考】(一)使用反射实现动态权限
- 【swift学习笔记】一.页面转跳的条件判断和传值
- 【swift学习笔记】二.页面转跳数据回传
- 【swift学习笔记】三.使用xib自定义UITableViewCell
- 【swift学习笔记】四.swift使用Alamofire和swiftyJson
- 【swift学习笔记】五.使用枚举优雅的管理Segue
- 【swift学习笔记】六.访facebook登录页面
- Docker Stack 部署web集群
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c# winform 窗体最大化后挡住了任务栏
- Oracle参数解析(timed_statistics)
- C#将引用的dll嵌入到exe文件中
- C# 软件版本号
- C# 实现登录并跳转界面
- QT 常用控件操作实例集锦
- C# Socket TCP发送图片与接收图片
- ingress通过daemonSet,nodeSelector,hostNetwork方式部署
- Oracle参数解析(event)
- Qt读写文件(2种方式)实现详解
- 字符串匹配 - KMP算法
- c# 判断文件是否发生了变化
- C# 用IrisSkin4.dll美化你的WinForm
- Oracle参数解析(shared_pool_size)
- C# GTS四轴运动控制器实例(固高科技步进电机不带编码器)