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()方法的更多相关文章

  1. Array.sort()方法

    Array.sort()方法将数组中的元素排序并返回排序后的数组. 当不带参数时,默认按照顺序排序,也就是从小到大.当然,也可以直接给sort加一个比较函数比较. ,,]; arr.sort(); c ...

  2. Array类的Sort()方法

    刚复习了Array类的sort()方法, 这里列举几个常用的,和大家一起分享. Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System. ...

  3. .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解

    本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...

  4. C# Array类的Sort()方法

    Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System.Int32 和System.String实现了IComparable接口,所以下 ...

  5. js中Array的sort方法

    Array.sort方法里需要传入一个参数,是一个function, 如果想要升序排序,就传入这样的一个function: function sortFunction(a,b){ return a-b ...

  6. JS sort() 方法

    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. array.s ...

  7. JS中sort()方法原理及使用

    说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. arra ...

  8. js的sort()方法

    说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. arra ...

  9. 深入了解javascript的sort方法

    在javascript中,数组对象有一个有趣的方法 sort,它接收一个类型为函数的参数作为排序的依据.这意味着开发者只需要关注如何比较两个值的大小,而不用管“排序”这件事内部是如何实现的.不过了解一 ...

随机推荐

  1. django-orm 快速清理migrations缓存

    Shell #!/bin/bash Project_dir=`pwd` find $Project_dir -type d -a -name 'migrations' \ -exec rm -rf { ...

  2. PHP实例:获取操作系统、IP、地理位置、浏览器、等信息

    获取访客操作系统以及浏览器语言 <?php function GetBrowser(){ if(!empty($_SERVER['HTTP_USER_AGENT'])){ $br = $_SER ...

  3. 2019南昌网络赛I:Yukino With Subinterval(CDQ) (树状数组套主席树)

    题意:询问区间有多少个连续的段,而且这段的颜色在[L,R]才算贡献,每段贡献是1. 有单点修改和区间查询. 思路:46min交了第一发树套树,T了. 稍加优化多交几次就过了. 不难想到,除了L这个点, ...

  4. wordpress调用自定义post_type文章

    前面我们讲了wordpress添加post_type自定义文章类型,我们现在来讲一下如何把自定义文章调用出来,我们以product为例,虽然我们自定义好了 Post Type 同时也编写了一些内容,但 ...

  5. vue社区活跃整合

    ===框架===== Nuxt(vue ssr服务端渲染) Quasar Framework 一个可以搭建多平台响应式网站的框架 Weex 是一个使用 Web 开发体验来开发高性能原生应用的框架. = ...

  6. Java 内存分配(转)

    Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性. 寄存器:JVM内部虚拟寄 ...

  7. 1.Java介绍

    第一章 走进Java 一.Java技术体系 Java技术体系组成部分:Java程序设计语言.Java虚拟机.Class文件格式.Java API类库 JDK:Java程序设计语言 + Java虚拟机 ...

  8. 【转】linux 下清空或删除大文件的一些方法

    原文:https://linux.cn/article-8024-1.html 在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件 ...

  9. JQuery$.extend()用法

    1.合并多个对象. <span style="font-size:18px;">//用法: jQuery.extend(obj1,obj2,obj3,..) var C ...

  10. Python3 异常

    异常 --- 程序执行时产生的事件,为Python对象 <Python学习手册>笔记 异常总是通过实例对象来识别 默认的异常处理器 --- 打印标准出错信息(包括引发的异常和堆栈跟踪-异常 ...