C# - Array.Sort()方法
Array类简介
Array类是C#中所有数组的基类。我们常用的[]声明数组即为Array类的语法,我们可通过Array类提供的各种方法对C#中数组进行操作。最典型的就是数组排序
Array.Sort 解析
比较原理:
Array类型的比较方法,由IComparable接口和其中的CompareTo方法实现:
- IComparable 接口:定义由值类型或类实现的特定于类型的通用比较方法,旨在对其实例进行排序
- CompareTo(Object):指示当前实例在排序顺序中的位置是在同一类型的第二个对象之前、之后还是与其相同。它由非泛型集合对象的方法自动调用,如Array.Sort(), 用于对数组中的每个成员进行排序。 如果自定义类或结构未实现IComparable,则无法对其成员进行排序,并且排序操作可以InvalidOperationException引发
普通数组类型:
由于数组如Int32已经继承了IComparable, IComparable等接口(注:int是Int32结构体);string继承了IComparable, IComparable等接口(注:string是String类)。
因此我们无需对测试类继承上述接口、定义比较方法等,可直接使用其比较方法进行排序:


//待排数组
int[] arr = { 9, 4, 5, 3, 3, 2, 2, 1, 0, -1 };
string[] str = { "张三", "李四", "王五" };
//默认情况
Array.Sort(arr); //-1 0 1 2 2 3 3 4 5 9
Array.Sort(str); //李四 王五 张三
//Lambda 隐式return方法:
Array.Sort(arr, (p1, p2) => p1.CompareTo(p2)); //-1 0 1 2 2 3 3 4 5 9
Array.Sort(arr, (p1, p2) => p2.CompareTo(p1)); //9 5 4 3 3 2 2 1 0 -1
Array.Sort(str, (p1, p2) => p1.CompareTo(p2)); //李四 王五 张三
Array.Sort(str, (p1, p2) => p2.CompareTo(p1)); //张三 王五 李四
//Lambda 显示return方法:
Array.Sort(arr, (p1, p2) =>
{
if (p1 > p2)
return 1;
else if (p1 < p2)
return -1;
else
return 0;
}); //-1 0 1 2 2 3 3 4 5 9
自定义类型:
由于我们自定义的类型(单、多个待比较参数)未自动继承IComparable等接口,因此想要对该类的实例进行特殊规则排序时,需要自行继承、并实现比较方法:
//自定义待排数据类
class Person : IComparable
{
//属性:姓名、性别
public string Name { get; set; }
public string Sex { get; set; }
//构造函数初始化
public Person(string name, string sex)
{
Name = name;
Sex = sex;
}
//重写打印格式
public override string ToString()
{
return Name + " " + Sex;
}
//实现Person类比较方法:优先姓名升序,同名则性别升序
public int CompareTo(object obj)
{
Person p = obj as Person;
if (!Name.Equals(p.Name))
return Name.CompareTo(p.Name);
else
return Sex.CompareTo(p.Sex);
}
}
//测试类
class Test
{
static void Main()
{
//创建自定义类型待排数组persons
Person[] persons =
{
new Person("张三", "Female"),
new Person("李四", "Male"),
new Person("王五", "Female"),
new Person("王五", "Male")
};
//自动使用Person类中的CompareTo比较方法
Array.Sort(persons);
foreach (Person p in persons)
Console.WriteLine(p);
/*
李四 Male
王五 Female
王五 Male
张三 Female
*/
}
}
Array其他属性及方法
推荐佳作:
参考
C# - Array.Sort()方法的更多相关文章
- Array.sort()方法
Array.sort()方法将数组中的元素排序并返回排序后的数组. 当不带参数时,默认按照顺序排序,也就是从小到大.当然,也可以直接给sort加一个比较函数比较. ,,]; arr.sort(); c ...
- Array类的Sort()方法
刚复习了Array类的sort()方法, 这里列举几个常用的,和大家一起分享. Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System. ...
- .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解
本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...
- C# Array类的Sort()方法
Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System.Int32 和System.String实现了IComparable接口,所以下 ...
- js中Array的sort方法
Array.sort方法里需要传入一个参数,是一个function, 如果想要升序排序,就传入这样的一个function: function sortFunction(a,b){ return a-b ...
- JS sort() 方法
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. array.s ...
- JS中sort()方法原理及使用
说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. arra ...
- js的sort()方法
说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. arra ...
- 深入了解javascript的sort方法
在javascript中,数组对象有一个有趣的方法 sort,它接收一个类型为函数的参数作为排序的依据.这意味着开发者只需要关注如何比较两个值的大小,而不用管“排序”这件事内部是如何实现的.不过了解一 ...
随机推荐
- 本机安装mysql步骤
原文:https://www.cnblogs.com/dukeShi/p/6546024.html 本机安装mysql服务,步骤教程(另附SQLyog和Navicat工具) 因为这段时间不是装系统就是 ...
- snowflake时间回退问题思考
算法比较简单,每个id-generator负责生成的ID由3部分组成,41位时间戳可以表示到毫秒,10bit worker-id内部可自行划分,比如3位表示IDC,7位表示机器.最后12位是在一毫秒的 ...
- 逆向破解之160个CrackMe —— 029
CrackMe —— 029 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- nginx 跨域请求访问
1.nginx跨域请求访问 location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin(请求域名) *(所有域名) http ...
- 02-C#笔记-类的定义
/* * Notes: * 1. 标识符必须以字母.下划线或 @ 开头,后面可以跟一系列的字母.数字( 0 - 9 ).下划线( _ ).@ * */ using System; namespace ...
- 水晶报表 VS2010 应用
VS.NET2010水晶报表安装部署[VS2010] 欢迎C#高手加盟QQ群:9340166 水晶报表VS2010版IDE安装标准版SAP Crystal Reports, version for ...
- jQuery的Promise 这里介绍的很详细
原文电梯:https://www.cnblogs.com/yelongsan/p/7644239.html 先前了解了ES6的Promise对象,来看看jQuery中的Promise,也就是jQuer ...
- zzulioj - 2617 体检
题目链接: http://acm.zzuli.edu.cn/problem.php?id=2617 题目描述: VX玩了这么多游戏以后,感觉自己身体素质和智商都有所下降,所以决定去医院体检一下.已知V ...
- Pandas | 26 疏离数据
当任何匹配特定值的数据(NaN/缺失值,尽管可以选择任何值)被省略时,稀疏对象被“压缩”. 一个特殊的SparseIndex对象跟踪数据被“稀疏”的地方. 这将在一个例子中更有意义. 所有的标准Pan ...
- 如何更新GitHub上的代码?
更新github上的代码 一.克隆代码 1.先是把自己GitHub上的代码克隆到本地(下载到本地) 步骤1.随便创建一个新文件夹(用来存放下载下来的代码) 步骤2.在文件夹中打开cmd 输入下载指令下 ...