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));

    结果同样就不输出了。

  • 相关阅读:
    私有属性的另类访问方式
    获取类所有属性和查看帮助文档
    类的私有属性及私方法(请注意属性的传值方式)
    类的私有属性及私方法
    类的定义
    怎么区分类变量和实例变量?
    面向对象编程案例04--访问控制
    面向对象编程案例03---继承之高级部分
    python 面向对象编程案例01
    静态方法
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3569062.html
Copyright © 2011-2022 走看看