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. idea 2019 集成activiti, idea activiti 新建bpmn文件, 解决idea activiti中文乱码

    idea 在线安装activiti插件 1. File-->Settings 2. 点击Plugins, 右侧界面点击Marketplace后在搜索框搜索 actiBPM 注: 网络原因没有加载 ...

  2. Huawei S系列交换机 Easydeploy 特性

    参考 HW S2750, S5700, S6720 V200R008C00 配置指南-基础配置-EasyDeploy配置 原理,DHCP&TFTP部署等 四. HW EasyDeploy HW ...

  3. Java期末复习——主观题

    JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Runtime Envir ...

  4. HFS ~ Http File Server

    HFS ~ Http File Server官网:https://www.rejetto.com/hfs/ 官方下载地址:https://www.rejetto.com/hfs/hfs.exe

  5. Nat类型测试

    这是一个测试NAT类型的小工具,一般也没太多用处,只有游戏玩家可能需要用来测试你的网络NAT类型是什么.NAT类型一般分为以下4种: 1. Full Cone NAT (完全圆锥型)2. Restri ...

  6. 梳理Linux中断处理子系统

    请根据下面链接进行学习: 软件方面可以参考蜗窝科技关于中断子系统的一系列文章<Linux中断子系统>,一共9篇文章,讲述了Linux中断的方方面面. <综述>是一个导论性质文档 ...

  7. Django 1.11 网站分页设计

    参考网址:https://www.cnblogs.com/kongzhagen/p/6640975.html

  8. 【JZOJ100208】【20190705】传说之下

    题目 三维空间上有一个点,进行了\(n\)次移动 第\(i\)次为在\([0,L_i]\)内随机一个长度\(l_i\),向\(\vec P_i\)方向移动\(l_i\) $\vec P_i $ 表示为 ...

  9. git提交代码时出现was rejected by remote错误

    git常见问题 git是大家在公司基本都项目管理工具,有一次在改了一个bug提交远程提交就出现问题了. 解决方案 首先这个是远程提交的时候被项目权限拦截掉了,一般在我们都用配置ssh公钥的方式操作,那 ...

  10. pyhon项目之后pexpect使用

    pyhon项目之后pexpect使用1.安装pip3.6 install pexpect 实例1 ssh 登陆linux 服务器,并且执行命令 #!/usr/bin/env python3.6# -* ...