C#中的比较和排序

c# ArrayList 的排序问题! 2009-01-19 20:10 c# ArrayList 的排序问题! c# ArrayList 的排序问题! 我看见网上有人用IComparer接口实现ArrayLIst 的排序问题 ,于是自己写了个小例子,编译已经通过,和大家一块分享。有不足之处,望不吝指正。 1、建一个结构雇员的结构 private struct Eployee{     public string 阅读详情

当我们将一些数据存储在一个集合中时,往往会有排序的需求,比如游戏中的积分排行榜,学生考试系统中的分数排行,或者根据不同的条件(根据姓名、根据年龄)进行排序。当出现这些需求的时候,我们希望建立一种规则,根据这种规则就可以确定两个数据的前后关系。其实,这种规则我们就可以用接口来定义。

一、使用集合ArrayList排序

在列表中添加一些数据,打印列表的元素,得到如图

public class s1: MonoBehaviour {
	
	void Start () {
		List<int> list = new List<int>();
		list.Add(3);
		list.Add(13);
		list.Add(2);
		list.Add(8);
		list.Add(21);

		//排序前
		printList(list);
		//排序
		list.Sort();
		//排序后
		printList(list);
	}

	void Update () {

	}

	void printList(List<int> list) {
		for (int i = 0;i< list.Count;i++) {
			print(list[i]);
		}
	}
}

在调用了Sort方法之后,打印出来的顺序是将数据进行了从小到大的排序

二、字符串类型排序

public class stringSort : Monobehaviour {
	
	void Start () {
		List<string> list = new List<string>();
		list.Add("Jobs"); //向列表中添加字符串数据
		list.Add("Linus");
		list.Add("Jensen");
		list.Add("Alex");
		list.Add("Bob");
	}

	//排序前
	printList(list);
	//排序
	list.Sort();
	//排序后
	printList(list);

	void printList(List<string> list)
	{
		for (int i = 0;i < list.Count; i++)
		{
			print(list[i]);
		}
	}
}

三、自定义类型排序

public class student : IComparable
{
	private string name;
	private int age;

	public Student(string name, int age)
	{
		this.name = name;
		this.age = age;
	}

	public string Name
	{
		get
		{
			return this.name;
		}
	}

	public int Age
	{
		get
		{
			return this.age;
		}
	}

	public int CompareTo(object other)
	{
		if (other is Student)
		{
			Student s = other as Student;
			if (this.age < s.age)
				return -1;
			else if (this.age == s.age)
				return 0;
			else 
				return 1;
		}
		else
		{
			throw new Exeption("not student exception");
		}
	}

	public override string ToString()
	{
		return string.Format("Student[Name:{0}, Age:{1}]", this.name, this.age);
	}
}

从Console窗口中,程序在调用Sort()方法的时候出现了问题,这个错误为ArgumentException,具体的错误内容是:does not implement right interace,也就说没有实现正确的接口。根据MSDN中的介绍,需要排序的类型,必须实现IComparable接口,这个接口在C#中的定义如下:

public interface IComparable
{
	int CompareTo(object obj);
}

当实现接口中的CompareTo方法时,如果返回小于0时,表示当前对象是排在另一个对象前面的;如果返回值等于0,表示当前对象和另一个对象在相同的位置;如果大于0则表示当前对象在另一对象后面。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Student
{
	private string name;
	private int age;
}

public Student(string name, int age)
{
	this.name = name;
	this.age = age;
}

public string Name
{
	get
	{
		return this.name;
	}
}

public int Age
{
	get
	{
		return this.age;
	}
}

public override string ToString()
{
	return string.Format("Student[Name:{0},Age:{1}",this.name,this.age);
}

public class ClassSort : Monobehaviour {
	
	void Start () {
		Student s1 = new Student("Jobs", 10);
		Student s2 = new Student("Linus", 9);
		Student s3 = new Student("Jensen", 11);
		Student s4 = new Student("Alex", 13);
		Student s5 = new Student("Bob" , 8);

		list.Add(s1); 
		list.Add(s2);
		list.Add(s3);
		list.Add(s4);
		list.Add(s5);
	}

	//排序前
	printList(list);
	//排序
	list.Sort();
	//排序后
	printList(list);

	void printList(List<Student> list)
	{
		for (int i = 0;i < list.Count; i++)
		{
			print(list[i]);
		}
	}
}

在上述代码中让Student实现了IComparable接口,在CompareTo方法中,我们根据学生的年龄进行比较,让年龄小的学生排在前面(返回负数)。然后我们再运行一遍代码,最终得到的运行结果

C#多个版本的比较排序差距 从一开始的继承Icomparer接口到现在的扩展方法和lambda表达式: using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace In_Depth 阅读详情

相关推荐

Unity UI Toolkit避坑指南:从官方Samples到实际项目,这些‘坑’我帮你踩过了

本文分享了Unity UI Toolkit在实际项目中的避坑经验和优化技巧,包括动画系统的高效替代方案、3D世界UI的创新实现方式、USS样式继承的反直觉规则等。通过详细的代码示例和性能优化策略,帮助开发者避免常见陷阱,提升开发效率。

weixin_29535577的博客 343

如何把集合某元素添加到第一个位置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、如何把集合某元素添加到第一个位置?代码示例 一、如何把集合某元素添加到第一个位置? 思路: 1,创建一个新的集合LinkedList集合 2,把需要把某元素置于以一个位置的集合循环 3,判断如果是置于第一个位置元素调用list.addFirst(置为第一个位置的元素); 4,如果不是则正常的添加方法list.add(元素) 代码示例 List list = new ArrayList<>(); list.add(“

菜鸟进阶日记 4889

小米汽车技术路线

从小米的电子电器架构来看,行业内EEA已经由域集中逐渐过度到域融合+区域控制的架构并向着中央计算+区域控制的方向发展。 而小米汽车智驾算法也从基于高精地图模块化架构,到去高精地图模块化架构,再到端到端架构,这也正是行业对于智驾算法演进的共识。

HITbingdu的博客 3788

C# ArrList集合排序

C# ArrList集合排序 作者:秋名 撰写时间:2020 年05 月27日 技术点:ArrList集合排序的两种方法,一种是Sort(),一种是自定义方法。继承接口IComparable/IComparer实现。 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; name

Q_MingTao 1429

010、Zephyr RTOS开发环境搭建(Docker)

摘要 本文分享了使用Docker搭建Zephyr RTOS开发环境的实践经验。作者通过团队新人配置环境的真实案例,指出传统安装方式存在版本冲突、缓存污染等问题,而Docker方案能确保环境一致性。文章详细介绍了自定义Docker镜像的设计思路,重点解决工具链版本匹配、Python虚拟环境隔离等问题,将镜像体积从2GB优化到800MB。提供了从拉取镜像到点亮LED的完整工作流程,并总结了USB设备直通、文件权限、缓存问题等常见陷阱。还探讨了多阶段构建、CI集成等进阶用法,同时客观分析了Docker方案的局限性

m0_50546716的博客 80

使用CubeMX配置STM32H7的FreeRTOS

本文将介绍如何使用CubeMX配置STM32H7的FreeRTOS,并提供相应的源代码示例。通过使用CubeMX,你可以轻松地配置FreeRTOS和系统资源,并生成相应的初始化代码和配置文件。在"FreeRTOS"选项卡的"Tasks"部分,可以配置系统中的任务。首先,打开CubeMX软件。在"FreeRTOS"选项卡的"Resources"部分,你可以配置FreeRTOS使用的资源,例如,堆内存和信号量。例如,我们可以创建两个简单的任务,一个任务将在循环中切换LED的状态,另一个任务将通过串口打印消息。

JeeVue的博客 712

C#排序算法——插入法

  在阅读此博文前,请先阅读我的博文“C#排序算法——基类设计“,以了解基类的结构。  在写代码前,我们先来了解一下插入法排序过程:  第1次遍历,构造一个只有一个元素的子集,list[0],显然,这个子集是有序的(因为只有一个元素啊)。  第2次遍历,将list[1]插入到有序子集list[0]中,构成新的有序子集list[0]:list[1]:当list[1]   ...

hustcyb的专栏 1898

MicroBlaze系列教程(5):AXI_UART16550的使用

axi-uart16550是Xilinx的一款串口IP核,支持配置成16450或16550模式,16550和16450是指的早期电脑主板上的串口芯片型号,16550相比于16450多了FIFO,现在已经很少使用。相比于,16550支持1或2位停止位,包括uartlite所有的功能,而且支持在SDK中灵活对波特率、数据、校验方式进行配置。与uartlite不同的是,不能单独指定发送中断和接收中断函数,只有一个中断函数,通过event参数来区分当前是发送或接收中断。

whik1194的博客 4543

C# 有关 ArrayList 排序的问题

【代码】C# 有关 ArrayList 排序的问题。

laocooon的博客 481

LeRobot 入门教程(十六)Isaac Lab LeIsaac 叠衣服、夹橙子仿真环境

LeRobotEnvHub现已支持通过LeIsaac进行机器人模仿学习,提供摘橙子、搬立方体等日常任务仿真环境。用户可通过HuggingFace共享环境,使用一行代码加载任务,支持随机动作测试和远程操控。系统提供云端仿真方案,无需本地GPU即可运行。当前支持4种任务环境,通过make_env函数切换,其中折叠布料任务需先调用initialize()函数。该平台集成了数据采集、转换和训练全流程,为机器人学习提供便捷工具链。

2506_90492529的博客 1483

Swin Transformer注意力计算复杂度为何比全局注意力少那么多?

本文对比分析了Vision Transformer(ViT)和Swin Transformer的计算复杂度。ViT采用全局注意力机制,计算复杂度为4[hwc^2]+2[(hw)^2C],当图像尺寸较大时计算量显著增加。而Swin Transformer采用窗口注意力机制,将图像划分为M×M的窗口(如7×7),计算复杂度降为4[hwc^2]+2[(hw)(M*M)*C]。以224×224图像为例,Swin Transformer的计算量比ViT减少约900倍,大幅节省了计算资源。文章通过矩阵乘法运算详细推导了

人工智能研究所的博客 63

C#排序比较

与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序。排序规范如下 IComparable接口(包括IComparable接口和IComparable&lt;T&gt;接口) &gt;和&lt;运算符 当需要实现排序算法时,使用IComparable接口。在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类实现了IC...

weixin_34107739的博客 1352

【华为OD机试真题E卷】474、推荐多样性 | 机试真题+思路参考+代码解析(E卷复用)(C++、Java、Py)

题目描述 >推荐多样性需要从多个列表中选择元素,一次性要返回 N 屏数据(窗口数量),每屏展示 K 个元素(窗口大小),选择策略:   各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推   每个列表的元素尽量均分为 N 份,如果不够 N 个,也要全部分配完,参考样例图:

KJ.JK 4435

C# 排序比较

在C# 的进化过程中不断简化了对象的比较方式 Type1: public void compare2() { Product pct = new Product(); List pcts = pct.Products(); //直接上委托 pcts.Sort(delegate(Pr

炘的专栏 1207

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C#基础之数组排序,对象大小比较

转载自:http://www.cnblogs.com/yukaizhao/archive/2011/08/19/csharp-compare.html 从个小例子开始: ? 1 2 3 int[] intArray = new int[]{2,3,6,1,4,5}; Array.Sort(intArray);

AchillesJPS的专栏 1871

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C#排序函数和自定义比较器

C#排序函数和自定义比较器 例子

kydkong的博客 6315

C#比较接口和排序

class Program { static void Main(string[] args) { TestClass t1 = new TestClass(); t1.Score = 90; t1.Name = "lucy"; TestClass t2 = ne

u011878387的专栏 903

C#中,如何使用自定义比较器对List进行排序?

这两种方法(自定义比较器类和 lambda 表达式/匿名方法)都可以灵活地定义排序逻辑,以满足特定的需求。自定义比较器允许定义排序的具体规则,而不仅仅是依赖元素的默认比较方式。如果不需要创建一个单独的比较器类,也可以使用 lambda 表达式或匿名方法作为。方法,该方法接受两个参数并返回一个整数,表示它们在排序序列中的相对位置。以下是一个简单的步骤指南,说明如何使用自定义比较器对。在C#中,可以使用自定义比较器(方法,并传入自定义比较器实例。类用于对整数进行降序排序。中定义的规则进行排序。

学习和分享 690

C#非比较排序(计数排序+基数排序)

非比较排序(计数排序+基数排序)C#

weixin_51565051的博客 150

【C#高性能排序技术内幕】:掌握并行排序与自定义比较器的黄金法则

掌握C#数据处理排序的高效实现方法,深入解析并行排序与自定义比较器的应用场景及性能优势,提升大数据量下的排序效率。适用于集合排序、复杂对象比较等实际需求,代码简洁可控,值得收藏。

SimProceed的博客 494

C# List 排序各种用法与比较

让数字字符串排序string[] strs = { "1", "111", "11", "999", "77" };             List&lt;string&gt; list = strs.ToList();             list.Sort(delegate (string s1, string s2) { return int.Parse(s1).CompareTo

Nemo的笔记本 6820

C# 对排序的认识( Comparison ) ,使用匿名方法实现比较器

  在C#中对数组及集合的排序(Sort) .需要提拱一个"比较器" (一个实现 IComparer 接口的类) 也可以用一个方法做比较器 这个方法 需要返回 0 1 或 -1. View Code 1 using System; 2 3 class ListSort 4 { 5 static void Main() 6 { 7 int[] nu...

weixin_30444105的博客 1237

C#排序之不同排序的比较

1. 选择排序(Selection Sort): 2. 冒泡排序(Bubble Sort): 3. 插入排序(Insertion Sort): 4. 希尔排序(Shell Sort): 5. 归并排序(Merge Sort): 6. 快速排序(Quick Sort): 7. 堆排序(Heap Sort):

乌托托的博客 682

C# List.Sort()自定义比较方法排序

要用下面的routeName进行排序 类 public class BusRoute { private string routeName; private int stationCount; } 自定义比较方法 public static int Compare(BusRoute r1, BusRoute r2) { return r1.

云淡风轻的博客 9593
上一篇: 用栈来实现页面管理
下一篇: 详解C#中的泛型以及编程中使用泛型的优点
极客范儿
极客范儿 新星创作者: 游戏开发技术领域 新星创作者: 游戏开发技术领域 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄12年 1万+粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值