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

    结果同样就不输出了。

  • 相关阅读:
    Python3 基本数据类型
    C语言使用以及其它语言经常出的错误
    Deleting array elements in JavaScript
    postgresql 导出建表语句的方法-类似describe table
    什么是分布式系统(通俗易懂的说法)
    什么是分布式系统,分布式系统例子?
    【转】Linux cp -a用法
    [转]Go基础之锁的初识
    fabricJs使用系列(一)
    chrome 的onbeforeunload事件没有触发
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3569062.html
Copyright © 2011-2022 走看看