次の方法で共有


Array.Sort メソッド (Array, IComparer)

1 次元 Array 内の要素を、指定した IComparer インターフェイスを使用して並べ替えます。

Overloads Public Shared Sub Sort( _
   ByVal array As Array, _   ByVal comparer As IComparer _)
[C#]
public static void Sort(Arrayarray,IComparercomparer);
[C++]
public: static void Sort(Array* array,IComparer* comparer);
[JScript]
public static function Sort(
   array : Array,comparer : IComparer);

パラメータ

  • array
    並べ替える 1 次元の Array

  • comparer
    要素を比較する場合に使用する IComparer 実装。

    または

    各要素の IComparable 実装を使用する場合は null 参照 (Visual Basic では Nothing) 。

例外

例外の種類 条件
ArgumentNullException array が null 参照 (Visual Basic では Nothing) です。
RankException array が多次元です。
InvalidOperationException comparer が null 参照 (Visual Basic では Nothing) で、array の 1 つ以上の要素が IComparable インターフェイスを実装していません。

解説

comparer が null 参照 (Visual Basic では Nothing) の場合、array の各要素は、array 内の他の要素と比較できるように、 IComparable インターフェイスを実装する必要があります。

並べ替えが正常に完了しなかった場合、結果は未定義になります。

このメソッドは、QuickSort アルゴリズムを使用します。このアルゴリズムは O(n ^2) 操作です。 n は、並べ替える要素の数を示し、平均操作回数は θ(n log n) です。

この実装では不安定な並べ替えを実行します。つまり、2 つの要素が等しかった場合、これらの順序は保持されない可能性があります。一方、安定した並べ替えでは、等しい要素の順序が保持されます。

使用例

[Visual Basic, C#, C++] 既定の比較演算子と並べ替え順序を反転するカスタム比較演算子を使用して、 Array の値を並べ替える方法を次の例に示します。現在の CultureInfo によって結果が異なることがあります。

 
Imports System
Imports System.Collections

Public Class SamplesArray

   Public Class myReverserClass
      Implements IComparer

      ' Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      Function Compare(x As Object, y As Object) As Integer _
         Implements IComparer.Compare
         Return New CaseInsensitiveComparer().Compare(y, x)
      End Function 'IComparer.Compare

   End Class 'myReverserClass

   Public Shared Sub Main()

      ' Creates and initializes a new Array and a new custom comparer.
      Dim myArr As [String]() =  {"The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog"}
      Dim 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 default comparer.
      Array.Sort(myArr, 1, 3)
      Console.WriteLine("After sorting a section of the Array using the default comparer:")
      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 default comparer.
      Array.Sort(myArr)
      Console.WriteLine("After sorting the entire Array using the default 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)

   End Sub 'Main

   Public Shared Sub PrintIndexAndValues(myArr() As [String])

      Dim i As Integer
      For i = 0 To myArr.Length - 1
         Console.WriteLine("   [{0}] : {1}", i, myArr(i))
      Next i
      Console.WriteLine()

   End Sub 'PrintIndexAndValues

End Class 'SamplesArray


'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 default comparer:
'   [0] : The
'   [1] : BROWN
'   [2] : FOX
'   [3] : QUICK
'   [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 default comparer:
'   [0] : BROWN
'   [1] : dog
'   [2] : FOX
'   [3] : jumps
'   [4] : lazy
'   [5] : over
'   [6] : QUICK
'   [7] : the
'   [8] : The
'
'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


[C#] 
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 default comparer.
      Array.Sort( myArr, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      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 default comparer.
      Array.Sort( myArr );
      Console.WriteLine( "After sorting the entire Array using the default 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 default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [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 default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

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

*/


[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::Collections;

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

void PrintIndexAndValues(String* myArr[])
{
   for (int i = 0; i < myArr->Length; i++) {
      Console::WriteLine(S"   [{0}] : {1}", __box(i), myArr[i]);
   }
   Console::WriteLine();
}

int main()
{
   // Creates and initializes a new Array and a new custom comparer.
   String* myArr[] = { S"The", S"QUICK", S"BROWN", S"FOX", S"jumps", S"over", S"the", S"lazy", S"dog" };
   IComparer* myComparer = new myReverserClass();

   // Displays the values of the Array.
   Console::WriteLine(S"The Array initially contains the following values:");
   PrintIndexAndValues(myArr);

   // Sorts a section of the Array using the default comparer.
   Array::Sort(myArr, 1, 3);
   Console::WriteLine(S"After sorting a section of the Array using the default comparer:");
   PrintIndexAndValues(myArr);

   // Sorts a section of the Array using the reverse case-insensitive comparer.
   Array::Sort(myArr, 1, 3, myComparer);
   Console::WriteLine(S"After sorting a section of the Array using the reverse case-insensitive comparer:");
   PrintIndexAndValues(myArr);

   // Sorts the entire Array using the default comparer.
   Array::Sort(myArr);
   Console::WriteLine(S"After sorting the entire Array using the default comparer:");
   PrintIndexAndValues(myArr);

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

/* 
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 default comparer:
   [0] : The
   [1] : BROWN
   [2] : FOX
   [3] : QUICK
   [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 default comparer:
   [0] : BROWN
   [1] : dog
   [2] : FOX
   [3] : jumps
   [4] : lazy
   [5] : over
   [6] : QUICK
   [7] : the
   [8] : The

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

*/

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

参照

Array クラス | Array メンバ | System 名前空間 | Array.Sort オーバーロードの一覧 | IComparer | IComparable | BinarySearch | カルチャを認識しない配列の操作の実行