1 次元 Array の範囲内の要素を、指定した IComparer インターフェイスを使用して並べ替えます。
Overloads Public Shared Sub Sort( _
ByVal array As Array, _ ByVal index As Integer, _ ByVal length As Integer, _ ByVal comparer As IComparer _)
[C#]
public static void Sort(Arrayarray,intindex,intlength,IComparercomparer);
[C++]
public: static void Sort(Array* array,intindex,intlength,IComparer* comparer);
[JScript]
public static function Sort(
array : Array,index : int,length : int,comparer : IComparer);
パラメータ
array
並べ替える 1 次元の Array 。index
並べ替え対象の範囲の開始位置を示すインデックス。length
並べ替え対象の範囲内にある要素の数。comparer
要素を比較する場合に使用する IComparer 実装。または
各要素の IComparable 実装を使用する場合は null 参照 (Visual Basic では Nothing) 。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | array が null 参照 (Visual Basic では Nothing) です。 |
RankException | array が多次元です。 |
ArgumentOutOfRangeException | index が array の下限より小さい値です。
または length が 0 未満です。 |
ArgumentException | index および length が 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 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
Array クラス | Array メンバ | System 名前空間 | Array.Sort オーバーロードの一覧 | IComparer | IComparable | BinarySearch | カルチャを認識しない配列の操作の実行