次の方法で共有


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

2 つの 1 次元 Array オブジェクト (一方のオブジェクトがキーを格納し、他方のオブジェクトがそれらに対応する項目を格納する) を、最初の Array 内のキーに基づき、指定した IComparer インターフェイスを使用して並べ替えます。

Overloads Public Shared Sub Sort( _
   ByVal keys As Array, _   ByVal items As Array, _   ByVal index As Integer, _   ByVal length As Integer, _   ByVal comparer As IComparer _)
[C#]
public static void Sort(Arraykeys,Arrayitems,intindex,intlength,IComparercomparer);
[C++]
public: static void Sort(Array* keys,Array* items,intindex,intlength,IComparer* comparer);
[JScript]
public static function Sort(
   keys : Array,items : Array,index : int,length : int,comparer : IComparer);

パラメータ

  • keys
    並べ替えるキーを格納している 1 次元の Array

  • items
    keys Array の各キーに対応する項目を格納している 1 次元の Array

    または

    keys Array だけを並べ替える場合は null 参照 (Visual Basic では Nothing) 。

  • index
    並べ替え対象の範囲の開始位置を示すインデックス。

  • length
    並べ替え対象の範囲内にある要素の数。

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

    または

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

例外

例外の種類 条件
ArgumentNullException keys が null 参照 (Visual Basic では Nothing) です。
RankException keys Array が多次元です。

または

items が null 参照 (Visual Basic では Nothing) ではなく多次元です。

ArgumentOutOfRangeException index が keys の下限より小さい値です。

または

length が 0 未満です。

ArgumentException items が null 参照 (Visual Basic では Nothing) ではなく、 keys の下限が items の下限と一致しません。

または

items が null 参照 (Nothing) ではなく、 keys の長さが items の長さと一致しません。

または

index および lengthkeys Array 内の有効な範囲を指定していません。

または

items が null 参照 (Nothing) ではなく、 index および lengthitems Array 内の有効な範囲を指定していません。

InvalidOperationException comparer が null 参照 (Visual Basic では Nothing) で、 keys Array の 1 つ以上の要素が IComparable インターフェイスを実装していません。

解説

keys Array の各キーには、 items Array に対応する項目があります。並べ替え中にキーが移動する場合は、 items Array の対応する項目も同様に移動します。したがって、 items Array は、 keys Array の対応するキーの配置に基づいて並べ替えられます。

comparer が null 参照 (Visual Basic では Nothing) の場合、 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 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

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