C#

您所在的位置:网站首页 二维数组sort函数用法 C#

C#

2023-04-22 02:22| 来源: 网络整理| 查看: 265

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其他属性及方法

推荐佳作:

Array类 - 菜鸟教程 Array类的属性和方法 - 等待黎明的日子 参考 Array类 - 菜鸟教程 IComparable接口 - Microsoft


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3