c#sort升序还是降序_C#中对数组或集合进行升序或降序排序
在.net framework中,数组和集合都实现了用于排序的方法sort(),数组通过调用Array.Sort(数组名)排序,集合通过调用 集合对象.Sort()方法排序。
默认的排序是使用升序排列,并且只能针对基本的数值类型排序,因为数值类型默认实现了对两个值比较的接口。但如果是引用类型需要排序,则此引用类型
需要实现IComparable接口,实现接口中的CompareTo()方法用于比较两个对象。
与比较和排序有关的接口有四个:非范型版本IComparable和IComparer,范型版本IComparable和IComparer
IComparable接口的主要目的是在需要比较和排序的类中实现CompareTo()方法,用于定义此类的2个对象比较的时候的默认的比较规则。
IComparer接口的主要目的是使某个继承此接口的类实现Comapre()方法,在此方法中定义两个对象的比较规则。此类就可以作为Sort()函数的参数,用于
在排序的时候作为比较和排序的规则。
例如:如果我们有一个学生类Student,有4个字段:int ID;Name;Score;如果有一个学生数组或学生集合,此集合需要排序。
则我们要做的工作为:
1.使Student能被比较和排序,就要实现IComparable接口,在CompareTo()方法中定义默认的排序规则,例如升序。
2.如果要实现降序,则我们需要定义一个类,此类实现IComparer接口,在Compare()中定义另外一种比较和排序的规则,例如降序。
3.调用Sort()方法实现排序,此方法可以不带参数,按默认规则排序,也可以把实现了IComparer的接口的类的对象作为参数,这样排序时将按照
另外一种规则排序。
下面示例演示了按升序或降序对一个Student类的数组或集合进行了排序:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//同时实现了范型和非范型的IComparable
public class Student:IComparable,IComparable
{
public int ID;
public string Name;
public int Score;
public Student(int id, string name, int score)
{
this.ID = id;
this.Name = name;
this.Score = score;
}
public string Info()
{
return string.Format("学号:{0,-5}姓名:{1,-5}分数:{2}",ID,Name,Score);
}
int IComparable.CompareTo(object obj)
{
return this.Score.CompareTo((obj as Student).Score);
}
int IComparable.CompareTo(Student other)
{
return this.Score.CompareTo(other.Score);
}
}
//实现了非范型的IComparer接口
public class ReverseCompareClass : IComparer
{
int IComparer.Compare(object x, object y)
{
return ((new CaseInsensitiveComparer()).Compare(y, x));
}
}
//实现了范型的IComparer接口
public class StuReverseCompareClass : IComparer
{
int IComparer.Compare(Student x, Student y)
{
return y.Score.CompareTo(x.Score);
}
}
class Program
{
static void Main(string[] args)
{
ArrayList stu = new ArrayList();
//List stu = new List();
int i;
Random r = new Random();
for (i = 0; i < 10; i++)
{
stu.Add( new Student(i,i.ToString(),r.Next(60,90)));
}
//如果使用非范型集合,我们就在sort()中使用非范型的比较类
stu.Sort(new ReverseCompareClass());
//如果使用范型集合,我们就在sort()中使用范型的比较类
//stu.Sort(new StuReverseCompareClass());
for (i = 0; i < 10; i++)
{
Console.WriteLine((stu[i] as Student).Info());
//Console.WriteLine(stu[i].Info());
}
Console.Read();
}
}
}
使用范型的好处是:类型安全,效率高,因为不存在装箱和拆箱操作。
c#sort升序还是降序_C#中对数组或集合进行升序或降序排序相关推荐
- scala中打印数组和集合_如何在Scala中打印数组?
scala中打印数组和集合 Scala中的数组 (Array in Scala) In Scala, Array is a data structure that is a collection of ...
- xml中遍历数组或集合
xml中遍历数组或集合 数组.集合都可以(数组中数据格式可以是字符串/int)
- c#中如何删除数组中的元素_C中的数组
c#中如何删除数组中的元素 为什么我们需要数组? (Why do we need Arrays?) Consider the problem of storing 10 integers. The n ...
- JAVA-List排序-Collections.sort()-对象数组(集合)根据某一属性排序
JAVA-List排序-Collections.sort() 当我们想对一个对象数组(集合)根据某一属性进行排序时,我们可以使用list中的Collection.sort(),这是一种较快捷的方式. ...
- 笔试算法题(28):删除乱序链表中的重复项 找出已经排好序的两个数组中的相同项...
出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序: 分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字 ...
- 谈谈JavaScript中的数组、集合及效率
数组是JavaScript提供的一个内部对象,它是一个标准的集合,我们可以添加(push).删除(shift)里面元素,我们还可以通过for循环遍历里面的元素,那么除了数组我们在JavaScript里 ...
- c#sort升序还是降序_c# List的sort排序方法详解
诸如List<T>等泛型集合类,直接提供了sort()方法用于将集合中的元素进行排序. 但是,其前提是集合中存放的是可直接排序的基本类型,如List<int& ...
- 数组:合并同为升序或者降序的数组
数组合并是归并排序中的一个步骤,今单独就两个有序数组的合并给出代码实现.归并排序的另一个步骤就是递归,递归就是一个方法在其方法体的某个地方调用自己,这样就会将同一个逻辑不断的压栈,到达递归条件后,又一 ...
- 在已经排好序的线性表中插入一个数,还是升序
在已经排好序的线性表中插入一个数,还是升序 #include<stdio.h> #define Maxsize 100 typedef struct s {int elem[Maxsize ...
最新文章
- Facebook 分享 MySQL 5.6 到 8.0 的迁移经验
- 消息幂等(去重)通用解决方案,RocketMQ
- ASP.NET中密码保护,MD5和SHA1算法的使用
- 带你掌握java反序列化漏洞及其检测
- Golang Java 实现 【将有序数组装换为二叉搜索树】
- 一些基本的数学概念,LDA的表述
- 【mybatisPlus】mybatis基本使用
- 稀疏表示、压缩感知.
- BNS100数码人像采集系统产品说明书
- UrlRewrite的使用
- ENSP实验五——三层交换机+二层交换机
- 重庆ETC学员“食神大赛”
- Flash:形变动画的制作
- java espresso车架,只爱钢架公路:Casati Espresso
- Real-Time Video Super-Resolution with Spatio-Temporal Networks and Motion Compensation论文解析(视频超分)
- 保时捷Taycan的800V电气架构赏析
- Linux UART编程 驱动蓝牙芯片
- VMware虚拟机如何开启雷电模拟器的VT?
- python人民币转大写_python2.x实现人民币转大写人民币
- centos6——初始化脚本
热门文章
- 跟郎朗媳妇有得一拼的AI,只看弹琴动作,完美复现原声 | CVPR 2020
- 完美解释了递归,哈哈哈哈
- 深度学习先驱Bengio:AI顶会论文的Deadline是时候取消了
- 引进研究生:​50万房补+年薪13万起;本科生30万房补​
- 这是一名南京985AI硕士,CSDN博客专家
- 10种Git技巧,让你省时省力又省心!
- 这道算法题太简单?你忽略了时间复杂度的要求!
- 和为s的连续正数序列
- python爬虫,生成文件速度追不上已经爬取文件的生成速度。
- python 正则表达式re常用操作符 使用方法 怎么用re正则表达式表示一个IP地址:0-255