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

和System.String实现了IComparable接口,所以下面的数组可以使用Array.Sort()。


string[] names = { "Lili", "Heicer", "Lucy" };
Array.Sort(names);
foreach (string n in names) {
Console.WriteLine(n);
}

输出排序后的数组:

如果对数组使用定制的类,就必须实现IComparable接口。这个借口定义了一个方法CompareTo()。

Person类
public class Person : IComparable {
public Person() { }
public Person(string name, string sex) {
this.Name = name;
this.Sex = sex;
}
public string Name;
public string Sex; public override string ToString() {
return this.Name + " " + this.Sex;
}
#region IComparable 成员
public int CompareTo(object obj) {
Person p = obj as Person;
if (p == null) {
throw new NotImplementedException();
}
return this.Name.CompareTo(p.Name);
}
#endregion
}

 

这里就可以对Person对象数组排序了:


 Person[] persons = {
new Person("Lili", "Female"),
new Person("Heicer", "Male"),
new Person("Lucy", "Female") };
Array.Sort(persons);
foreach (Person p in persons){
Console.WriteLine(p);
}

排序后的结果:

如果Person对象的排序方式不同,或者不能修改在数组中用作元素的类,就可以执行ICompare接口。这个接口定

义了Compare()方法。ICompare接口必须要独立于要比较的类。这里定义PersonCompare类

PersonCompare类
public class PersonComparer:IComparer {
public PersonComparer() { }
#region IComparer 成员
public int Compare(object x, object y) {
Person p1 = x as Person;
Person p2 = y as Person;
if (p1 == null || p2 == null) {
throw new ArgumentException("Person为空");
}
return p1.Name.CompareTo(p2.Name);
}
#endregion
}

现在,可以将一个PersonComparer对象传送给Array.Sort()方法的第二个变元。


Array.Sort(persons, new PersonComparer());

结果是就不输出了。

另外Sort()方法也可以把委托作为参数:


pulic delegate int Comparison<</SPAN>T>(T x, T y);

对于Person对象数组,参数T是Person类型:


Array.Sort(persons, delegate(Person p1, Person p2) {
return p1.Name.CompareTo(p2.Name);});

或者可以使用λ表达式传送两个Person对象,给数组排序:


Array.Sort(persons, (p1, p2) => p1.Name.CompareTo(p2.Name));

结果同样就不输出了。

C# Array类的Sort()方法的更多相关文章

  1. Array类的Sort()方法

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

  2. .NET中string[]数组和List<string>泛型的相互转换以及Array类的Sort()方法(转)

    从string[]转List<string>: " }; List<string> list = new List<string>(str); 从List ...

  3. js中的数组Array定义与sort方法使用示例

    Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList  定义方法:  1:使用new Array(5  )创建数组 var ary = new Array(5): ...

  4. Java学习之模拟纸牌游戏,List的ArrayList,Map的HashMap,重写Collections类的sort方法对指定类进行通过特定属性排序,输入异常处理等的学习

    首先放上测试效果图 设计框架 具体的代码实现 创建玩家类 public class Player implements Comparable<Player>{ int id; String ...

  5. 测试Array对象的sort方法的作用。将1985,1970,1999,1998,2000,1963这些年份按升序输出。

    <script type="text/javascript">var years = new Array(1985,1970,1999,1998,2000,1963); ...

  6. 重载Array类的contains方法

    var allFilters = self.filtersContainer?.filters ?? [OpalFilter]() if let sorter = filtersContainer?. ...

  7. 使用Java语言实现,自己主动生成10个整数(1~100,求出生成数列中的最大值和最小值,不同意使用Arrays类的sort方法

    这是考察主要的java基础,没啥难点,直接上代码,近期在准备面试,所以做一些基础的面试题练练手 public class Demo1 { public static void main(String[ ...

  8. Flex Array内置排序方法的使用

    在Array类中,提供内置的排序方法.排序是在软件开发的过程中,经常遇到的问题.通过这些内置的方法,可以快速轻便的进行排序操作. Array类提供sort方法对Array实例进行排序.sort方法没有 ...

  9. 使用Sort方法对数组进行快速排序

    实现效果: 知识运用: Array类的Sort方法 public static void Sort(Array array)   // array:要排序的一维Array数组 实现代码: static ...

随机推荐

  1. 如何快速将文本中的tab更换成逗号(图文详解)

    不多说,直接上干货! 现有一份数据如下. 下载日志数据并分析 到搜狗实验室下载用户查询日志 1) 介绍 搜索引擎查询日志库设计为包括约1个月(2008年6月)Sogou搜索引擎部分网页查询需求及用户点 ...

  2. ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash

    rails 开发中 5.1版本使用binding.pry会报 ActionController::UnfilteredParameters: unable to convert unpermitted ...

  3. [心平气和读经典]The TCP/IP Guide(000)

    The TCP/IP Guide [Page 39] The TCP/IP Guide: Introduction and "Guide to The Guide" | 第1章 概 ...

  4. LightOJ 1214 Large Division

    Large Division Given two integers, a and b, you should check whether a is divisible by b or not. We ...

  5. [PY3]——内置数据结构(3)——字符串及其常用操作

    字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...

  6. 【转】让Entity Framework不再私闯sys.databases

    这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名 ...

  7. 第一章:初识PHP

    Web程序工作原理介绍? 工作方式? 浏览器首先向Web服务器发出请求,Web服务器对请求做出响应,将响应数据发送给客户端浏览器,通常是一个HTML文件,然后通过浏览器把HTML文件信息显示在屏幕上. ...

  8. ++i? i++? i+=1? i=i+1? 何必纠结?

    前言 今天在牛客上看面经,看到一个问题:num++; num+=1; num = num +1; 哪个效率最高? 自从学习C语言开始,我就在纠结for语言应该写i++,还是++i,其实这个问题,可以通 ...

  9. 使用 Redis 实现分布式锁(转载)

    背景 在一般的分布式应用中,要安全有效地同步多服务器多进程之间的共享资源访问,就要涉及到分布式锁.目前项目是基于 Tornado 实现的分布式部署,同时也使用了 Redis 作为缓存.参考了一些资料并 ...

  10. [转]在windows service中使用timer

    本文转自:http://blog.csdn.net/sharpnessdotnet/article/details/7637180 一定要使用System.Timers.Timer timer 而不是 ...