2 つの 1 次元 Array オブジェクト (一方のオブジェクトがキーを格納し、他方のオブジェクトがそれらに対応する項目を格納する) を、最初の Array 内のキーに基づき、各キーによって実装された IComparable インターフェイスを使用して並べ替えます。
Overloads Public Shared Sub Sort( _
ByVal keys As Array, _ ByVal items As Array _)
[C#]
public static void Sort(Arraykeys,Arrayitems);
[C++]
public: static void Sort(Array* keys,Array* items);
[JScript]
public static function Sort(
keys : Array,items : Array);
パラメータ
keys
並べ替えるキーを格納している 1 次元の Array 。items
keys Array の各キーに対応する項目を格納している 1 次元の Array 。または
keys Array だけを並べ替える場合は null 参照 (Visual Basic では Nothing) 。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | keys が null 参照 (Visual Basic では Nothing) です。 |
RankException | keys Array が多次元です。
または items Array が多次元です。 |
ArgumentException | items が null 参照 (Visual Basic では Nothing) ではなく、 keys の下限が items の下限と一致しません。
または items が null 参照 (Nothing) ではなく、 keys の長さが items の長さと一致しません。 |
InvalidOperationException | keys Array の 1 つ以上の要素が、 IComparable インターフェイスを実装していません。 |
解説
keys Array の各キーには、 items Array に対応する項目があります。並べ替え中にキーが移動する場合は、 items Array の対応する項目も同様に移動します。したがって、 items Array は、 keys Array の対応するキーの配置に基づいて並べ替えられます。
各キーは、 keys Array 内の他の要素と比較できるように、 IComparable インターフェイスを実装する必要があります。
並べ替えが正常に完了しなかった場合、結果は未定義になります。
このメソッドは、QuickSort アルゴリズムを使用します。このアルゴリズムは O(n ^2) 操作です。 n は、並べ替える要素の数を示し、平均操作回数は θ(n log n) です。
この実装では不安定な並べ替えを実行します。つまり、2 つの要素が等しかった場合、これらの順序は保持されない可能性があります。一方、安定した並べ替えでは、等しい要素の順序が保持されます。
使用例
[Visual Basic, C#, C++] キーと値をそれぞれ含む 2 つの関連付けられた配列を並べ替える方法を次の例に示します。既定の比較演算子と並べ替え順序を反転するカスタム比較演算子を使用して並べ替えを行います。現在の 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 myKeys As [String]() = {"red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange"}
Dim myValues As [String]() = {"strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe"}
Dim myComparer = New myReverserClass()
' Displays the values of the Array.
Console.WriteLine("The Array initially contains the following values:")
PrintKeysAndValues(myKeys, myValues)
' Sorts a section of the Array using the default comparer.
Array.Sort(myKeys, myValues, 1, 3)
Console.WriteLine("After sorting a section of the Array using the default comparer:")
PrintKeysAndValues(myKeys, myValues)
' Sorts a section of the Array using the reverse case-insensitive comparer.
Array.Sort(myKeys, myValues, 1, 3, myComparer)
Console.WriteLine("After sorting a section of the Array using the reverse case-insensitive comparer:")
PrintKeysAndValues(myKeys, myValues)
' Sorts the entire Array using the default comparer.
Array.Sort(myKeys, myValues)
Console.WriteLine("After sorting the entire Array using the default comparer:")
PrintKeysAndValues(myKeys, myValues)
' Sorts the entire Array using the reverse case-insensitive comparer.
Array.Sort(myKeys, myValues, myComparer)
Console.WriteLine("After sorting the entire Array using the reverse case-insensitive comparer:")
PrintKeysAndValues(myKeys, myValues)
End Sub 'Main
Public Shared Sub PrintKeysAndValues(myKeys() As [String], myValues() As [String])
Dim i As Integer
For i = 0 To myKeys.Length - 1
Console.WriteLine(" {0,-10}: {1}", myKeys(i), myValues(i))
Next i
Console.WriteLine()
End Sub 'PrintKeysAndValues
End Class 'SamplesArray
'This code produces the following output.
'
'The Array initially contains the following values:
' red : strawberries
' GREEN : PEARS
' YELLOW : LIMES
' BLUE : BERRIES
' purple : grapes
' black : olives
' orange : cantaloupe
'
'After sorting a section of the Array using the default comparer:
' red : strawberries
' BLUE : BERRIES
' GREEN : PEARS
' YELLOW : LIMES
' purple : grapes
' black : olives
' orange : cantaloupe
'
'After sorting a section of the Array using the reverse case-insensitive comparer:
' red : strawberries
' YELLOW : LIMES
' GREEN : PEARS
' BLUE : BERRIES
' purple : grapes
' black : olives
' orange : cantaloupe
'
'After sorting the entire Array using the default comparer:
' black : olives
' BLUE : BERRIES
' GREEN : PEARS
' orange : cantaloupe
' purple : grapes
' red : strawberries
' YELLOW : LIMES
'
'After sorting the entire Array using the reverse case-insensitive comparer:
' YELLOW : LIMES
' red : strawberries
' purple : grapes
' orange : cantaloupe
' GREEN : PEARS
' BLUE : BERRIES
' black : olives
[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[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
IComparer myComparer = new myReverserClass();
// Displays the values of the Array.
Console.WriteLine( "The Array initially contains the following values:" );
PrintKeysAndValues( myKeys, myValues );
// Sorts a section of the Array using the default comparer.
Array.Sort( myKeys, myValues, 1, 3 );
Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
PrintKeysAndValues( myKeys, myValues );
// Sorts a section of the Array using the reverse case-insensitive comparer.
Array.Sort( myKeys, myValues, 1, 3, myComparer );
Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
PrintKeysAndValues( myKeys, myValues );
// Sorts the entire Array using the default comparer.
Array.Sort( myKeys, myValues );
Console.WriteLine( "After sorting the entire Array using the default comparer:" );
PrintKeysAndValues( myKeys, myValues );
// Sorts the entire Array using the reverse case-insensitive comparer.
Array.Sort( myKeys, myValues, myComparer );
Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
PrintKeysAndValues( myKeys, myValues );
}
public static void PrintKeysAndValues( String[] myKeys, String[] myValues ) {
for ( int i = 0; i < myKeys.Length; i++ ) {
Console.WriteLine( " {0,-10}: {1}", myKeys[i], myValues[i] );
}
Console.WriteLine();
}
}
/*
This code produces the following output.
The Array initially contains the following values:
red : strawberries
GREEN : PEARS
YELLOW : LIMES
BLUE : BERRIES
purple : grapes
black : olives
orange : cantaloupe
After sorting a section of the Array using the default comparer:
red : strawberries
BLUE : BERRIES
GREEN : PEARS
YELLOW : LIMES
purple : grapes
black : olives
orange : cantaloupe
After sorting a section of the Array using the reverse case-insensitive comparer:
red : strawberries
YELLOW : LIMES
GREEN : PEARS
BLUE : BERRIES
purple : grapes
black : olives
orange : cantaloupe
After sorting the entire Array using the default comparer:
black : olives
BLUE : BERRIES
GREEN : PEARS
orange : cantaloupe
purple : grapes
red : strawberries
YELLOW : LIMES
After sorting the entire Array using the reverse case-insensitive comparer:
YELLOW : LIMES
red : strawberries
purple : grapes
orange : cantaloupe
GREEN : PEARS
BLUE : BERRIES
black : olives
*/
[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 PrintKeysAndValues(String* myKeys[], String* myValues[])
{
for (int i = 0; i < myKeys->Length; i++) {
Console::WriteLine(S" {0, -10}: {1}", myKeys->Item[i], myValues->Item[i]);
}
Console::WriteLine();
}
int main()
{
// Creates and initializes a new Array and a new custom comparer.
String* myKeys[] = { S"red", S"GREEN", S"YELLOW", S"BLUE", S"purple", S"black", S"orange" };
String* myValues[] = { S"strawberries", S"PEARS", S"LIMES", S"BERRIES", S"grapes", S"olives", S"cantaloupe" };
IComparer* myComparer = new myReverserClass();
// Displays the values of the Array.
Console::WriteLine(S"The Array initially contains the following values:");
PrintKeysAndValues(myKeys, myValues);
// Sorts a section of the Array using the default comparer.
Array::Sort(myKeys, myValues, 1, 3);
Console::WriteLine(S"After sorting a section of the Array using the default comparer:");
// Sorts a section of the Array using the reverse case-insensitive comparer.
Array::Sort(myKeys, myValues, 1, 3, myComparer);
Console::WriteLine(S"After sorting a section of the Array using the reverse case-insensitive comparer:");
PrintKeysAndValues(myKeys, myValues);
// Sorts the entire Array using the default comparer.
Array::Sort(myKeys, myValues);
Console::WriteLine(S"After sorting the entire Array using the default comparer:");
PrintKeysAndValues(myKeys, myValues);
// Sorts the entire Array using the reverse case-insensitive comparer.
Array::Sort(myKeys, myValues, myComparer);
Console::WriteLine(S"After sorting the entire Array using the reverse case-insensitive comparer:");
PrintKeysAndValues(myKeys, myValues);
}
/*
This code produces the following output.
The Array initially contains the following values:
red : strawberries
GREEN : PEARS
YELLOW : LIMES
BLUE : BERRIES
purple : grapes
black : olives
orange : cantaloupe
After sorting a section of the Array using the default comparer:
red : strawberries
BLUE : BERRIES
GREEN : PEARS
YELLOW : LIMES
purple : grapes
black : olives
orange : cantaloupe
After sorting a section of the Array using the reverse case-insensitive comparer:
red : strawberries
YELLOW : LIMES
GREEN : PEARS
BLUE : BERRIES
purple : grapes
black : olives
orange : cantaloupe
After sorting the entire Array using the default comparer:
black : olives
BLUE : BERRIES
GREEN : PEARS
orange : cantaloupe
purple : grapes
red : strawberries
YELLOW : LIMES
After sorting the entire Array using the reverse case-insensitive comparer:
YELLOW : LIMES
red : strawberries
purple : grapes
orange : cantaloupe
GREEN : PEARS
BLUE : BERRIES
black : olives
*/
[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 オーバーロードの一覧 | IComparable | BinarySearch | カルチャを認識しない配列の操作の実行