代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C#

Array.Sort的执行步骤,该如何处理

发布时间:2019-09-19浏览(1211)

    Array.Sort的执行步骤
    主要问题是
    1、既然Array.Sort本身具体有排序作用为什么还要参数 myComparer?难道仅仅是为了倒序?
    2、myReverserClass::Compare(object x, object y)中的X,Y哪里来的?程序中并没有显式的调用compare函数




    // 程序如下
    using System;
    using System.Collections;

    public class SamplesArray  
    {
      public class myReverserClass : IComparer  
    {
    // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
    int IComparer.Compare( Object x, Object y )  
    {
    return( (new CaseInsensitiveComparer()).Compare( y, x ) );
    }

    }

    public static void Main()  
    {
     
    // Creates and initializes a new Array and a new custom comparer.
    String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
    IComparer myComparer = new myReverserClass();
     
    // Displays the values of the Array.
    Console.WriteLine( "The Array initially contains the following values:" );
    PrintIndexAndValues( myArr );
     
    // Sorts a section of the Array using the reverse case-insensitive comparer.
    Array.Sort( myArr, 1, 3, myComparer ); //【×××】
    Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
    PrintIndexAndValues( myArr );

    // Sorts the entire Array using the reverse case-insensitive comparer.
    Array.Sort( myArr, myComparer ); //【×××】
    Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
    PrintIndexAndValues( myArr );

    }
     
    public static void PrintIndexAndValues( String[] myArr )  
    {
    for ( int i = 0; i < myArr.Length; i++ )  
    {
    Console.WriteLine( " [{0}] : {1}", i, myArr[i] );
    }
    Console.WriteLine();
    }
    }


    /* 
    This code produces the following output.

    The Array initially contains the following values:
      [0] : The
      [1] : QUICK
      [2] : BROWN
      [3] : FOX
      [4] : jumps
      [5] : over
      [6] : the
      [7] : lazy
      [8] : dog



    After sorting a section of the Array using the reverse case-insensitive comparer:
      [0] : The
      [1] : QUICK
      [2] : FOX
      [3] : BROWN
      [4] : jumps
      [5] : over
      [6] : the
      [7] : lazy
      [8] : dog



    After sorting the entire Array using the reverse case-insensitive comparer:
      [0] : the
      [1] : The
      [2] : QUICK
      [3] : over
      [4] : lazy
      [5] : jumps
      [6] : FOX
      [7] : dog
      [8] : BROWN
    */



    ------解决方案--------------------

    Sort只是系统封装的简单排序
    通过继承IComparer接口 你可以灵活的进行排序 包括一些需要中间处理的逻辑
    ------解决方案--------------------
    2、myReverserClass::Compare(object x, object y)中的X,Y哪里来的?程序中并没有显式的调用compare函数 

    x, y 是指序列中的任意两个元素。就是写在什么情况下 x > y , x = y, or x < y
    ------解决方案--------------------
    如果没有IComparable,如果你没有实现自己的两个对象的比较,ArrayList是不知道两个对象应该怎么比较的。因为它知道的只是一个未知的对象链表。