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,它接收一个类型为函数的参数作为排序的依据.这意味着开发者只需要关注如何比较两个值的大小,而不用管“排序”这件事内部是如何实现的.不过了解一 ...
随机推荐
- 跟着9张思维导图学习Javascript js 关键字和保留字 css3中的BFC,IFC,GFC和FFC
跟着9张思维导图学习Javascript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小ti ...
- 旅游景点信息API接口大全
1.分享数据:“http://www.shareapi.cn/docs/api/id/127”,免费,次数1000次 返回JSON示例 { "SceneryID":10224,/* ...
- Centos7 安装腾达U12驱动无线网卡
解决过程: 办法一: CentOS7.3 默认的内核版本较低,为 3.10.0-514.el7.x86_64. 无论是使用腾达官方提供的驱动,还是github 上的驱动(链接 https://gith ...
- 【前端_React】npm常用命令
安装模块(包): //全局安装 $ npm install 模块名 -g //本地安装 $ npm install 模块名 //一次性安装多个 $ npm install 模块1 模块2 模块n -- ...
- Nginx 核心配置-长连接配置
Nginx 核心配置-长连接配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.长连接配置参数说明 keepalive_timeout number; 设定保持连接超时时长,0 ...
- NBU磁带库报错代码
Linux驱动报错"Sense Key"和"ASC and ASCQ"含义 1.Sense Keys Definitions 0x0 No sense 0x1 ...
- wordpress调用指定类型post_type的文章
wordpress很强大,可以添加多种post_type文章类型,假如我们要调用product产品模型的文章要如何操作呢?随ytkah一起来看看吧.我们用'post_type' => 'prod ...
- 05-cmake语法-message()
输出错误 message(FATAL_ERROR " FATAL: In-source builds are not allowed. You should create a separat ...
- 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
- javascript中 encodeURIComponent() 与 encodeURI() 的区别
前言:js 中仅有的几个全局函数中,有两个全局函数可以用来编码url 字符串. 一.encodeURIComponent() 将转义用于分隔 URI 各个部分的标点符号 ,也就是可以编码 " ...