zoukankan      html  css  js  c++  java
  • Array类的Sort()方法

    刚复习了Array类的sort()方法, 这里列举几个常用的,和大家一起分享。

    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类
    1 public class Person : IComparable {
    2 public Person() { }
    3 public Person(string name, string sex) {
    4 this.Name = name;
    5 this.Sex = sex;
    6 }
    7 public string Name;
    8 public string Sex;
    9
    10 public override string ToString() {
    11 return this.Name + " " + this.Sex;
    12 }
    13 #region IComparable 成员
    14 public int CompareTo(object obj) {
    15 Person p = obj as Person;
    16 if (p == null) {
    17 throw new NotImplementedException();
    18 }
    19 return this.Name.CompareTo(p.Name);
    20 }
    21 #endregion
    22 }

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

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

    排序后的结果:

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

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

    PersonCompare类
    1 public class PersonComparer:IComparer {
    2 public PersonComparer() { }
    3 #region IComparer 成员
    4 public int Compare(object x, object y) {
    5 Person p1 = x as Person;
    6 Person p2 = y as Person;
    7 if (p1 == null || p2 == null) {
    8 throw new ArgumentException("Person为空");
    9 }
    10 return p1.Name.CompareTo(p2.Name);
    11 }
    12 #endregion
    13 }

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

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

    结果是就不输出了。

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

    pulic delegate int Comparison<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));

    结果同样就不输出了。

  • 相关阅读:
    格子刷油漆【动态规划问题】—NYOJ 980
    Throughput Controller
    CSV Data Set Config 详细使用说明
    nmap使用笔记
    记三个有趣的漏洞
    Windows添加右键新增.md文件
    文件上传绕过WAF
    bypass_safedog
    漏洞挖掘之爆破的艺术
    特殊后缀上传(为什么用白名单不用黑名单)
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3569062.html
Copyright © 2011-2022 走看看