次の方法で共有


SortedList クラス

キーによって並べ替えられ、キーとインデックスを使ってアクセスできる、キーと値の組み合わせのコレクションを表します。

この型のすべてのメンバの一覧については、SortedList メンバ を参照してください。

System.Object
   System.Collections.SortedList

<Serializable>
Public Class SortedList   Implements IDictionary, ICollection, IEnumerable, ICloneable
[C#]
[Serializable]
public class SortedList : IDictionary, ICollection, IEnumerable,   ICloneable
[C++]
[Serializable]
public __gc class SortedList : public IDictionary, ICollection,   IEnumerable, ICloneable
[JScript]
public
   Serializable
class SortedList implements IDictionary, ICollection,   IEnumerable, ICloneable

スレッドセーフ

この型の public static (Visual Basic では Shared) メンバは、マルチスレッド操作に対して安全です。インスタンス メンバがスレッド セーフになるかどうかは保証されていません。

コレクションが変更されない限り、 SortedList では、複数の読み込み操作が同時に発生しても問題ありません。 SortedList を確実にスレッド セーフにするためには、すべての操作を Synchronized メソッドから返されるラッパー経由で実行する必要があります。

コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。コレクションが同期されている場合でも、他のスレッドがそのコレクションを変更する可能性はあり、そのような状況が発生すると列挙子は例外をスローします。列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチします。

解説

SortedList は、 HashtableArray の両方の特性を備えています。 Item インデクサ プロパティを使用して要素のキーによって要素にアクセスする場合には、 Hashtable と同様に動作します。 GetByIndex または SetByIndex を使用して要素のインデックスによって要素にアクセスする場合には、 Array と同様に動作します。

SortedList は、リストの要素を格納するために、内部に 2 つの配列を保持しています。一方の配列にはキーを格納し、他方の配列にはキーに関連付けられている値を格納します。各要素はキーと値の組み合わせであり、 DictionaryEntry オブジェクトとしてアクセスできます。キーには null 参照 (Visual Basic では Nothing) は使用できませんが、値は null でもかまいません。

SortedList の容量は、リストが保持できる要素の数です。 SortedList に要素を追加すると、必要に応じて、再割り当てを行うことによって容量が自動的に増加します。容量を減らすには、 TrimToSize を呼び出すか、 Capacity プロパティを明示的に設定します。

SortedList の要素は、 SortedList が作成されるときに指定された IComparer の特定の実装か、キー自体が提供する IComparable 実装のいずれかに従って並べ替えられます。いずれの場合でも、 SortedList では、キーが重複することはあり得ません。

並べ替え順に基づいたインデックス順。要素を追加すると、その要素は正しい並べ替え順に従って SortedList に挿入され、それに応じてインデックスも調整されます。要素が削除されると、それに応じてインデックスも調整されます。したがって、特定のキーと値の組み合わせのインデックスは、要素が SortedList で追加または削除されるときに変更されることがあります。

SortedList に対する操作は、並べ替えが必要になるため、 Hashtable に対する操作よりも遅くなる傾向があります。ただし、 SortedList では、関連付けられているキーまたはインデックスのどちらを使用しても値にアクセスできるため、柔軟性という面ではより優れています。

このコレクションのインデックスは 0 から始まります。

[Visual Basic, C#] C# 言語の foreach ステートメント (Visual Basic では for each) は、コレクション内の各要素の型を必要とします。 SortedList の各要素はキーと値の組み合わせであるため、要素の型は、キーの型や値の型にはなりません。その代わり、要素の型は DictionaryEntry になります。例:

 
foreach (DictionaryEntry myDE in mySortedList) {...}
[Visual Basic] 
Dim myDE As DictionaryEntry
For Each myDE In mySortedList
   ...
Next myDE

[Visual Basic, C#] foreach ステートメントは、列挙子のラッパーです。これは、コレクションからの読み取りだけを許可し、コレクションへの書き込みを防ぎます。

使用例

[Visual Basic, C#, C++] SortedList を作成および初期化する方法と、そのキーと値を出力する方法の例を次に示します。

 
Imports System
Imports System.Collections
Imports Microsoft.VisualBasic

Public Class SamplesSortedList    
    
    Public Shared Sub Main()
        
        ' Creates and initializes a new SortedList.
        Dim mySL As New SortedList()
        mySL.Add("First", "Hello")
        mySL.Add("Second", "World")
        mySL.Add("Third", "!")
        
        ' Displays the properties and values of the SortedList.
        Console.WriteLine("mySL")
        Console.WriteLine("  Count:    {0}", mySL.Count)
        Console.WriteLine("  Capacity: {0}", mySL.Capacity)
        Console.WriteLine("  Keys and Values:")
        PrintKeysAndValues(mySL)
    End Sub
    
    Public Shared Sub PrintKeysAndValues(myList As SortedList)
        Console.WriteLine(ControlChars.Tab & "-KEY-" & ControlChars.Tab & _
           "-VALUE-")
        Dim i As Integer
        For i = 0 To myList.Count - 1
            Console.WriteLine(ControlChars.Tab & "{0}:" & ControlChars.Tab & _
               "{1}", myList.GetKey(i), myList.GetByIndex(i))
        Next i
        Console.WriteLine()
    End Sub
End Class

' This code produces the following output.
' 
' mySL
'   Count:    3
'   Capacity: 16
'   Keys and Values:
'     -KEY-     -VALUE-
'     First:    Hello
'     Second:   World
'     Third:    !
 

[C#] 
using System;
using System.Collections;
public class SamplesSortedList  {

   public static void Main()  {

      // Creates and initializes a new SortedList.
      SortedList mySL = new SortedList();
      mySL.Add("First", "Hello");
      mySL.Add("Second", "World");
      mySL.Add("Third", "!");

      // Displays the properties and values of the SortedList.
      Console.WriteLine( "mySL" );
      Console.WriteLine( "  Count:    {0}", mySL.Count );
      Console.WriteLine( "  Capacity: {0}", mySL.Capacity );
      Console.WriteLine( "  Keys and Values:" );
      PrintKeysAndValues( mySL );
   }


   public static void PrintKeysAndValues( SortedList myList )  {
      Console.WriteLine( "\t-KEY-\t-VALUE-" );
      for ( int i = 0; i < myList.Count; i++ )  {
         Console.WriteLine( "\t{0}:\t{1}", myList.GetKey(i), myList.GetByIndex(i) );
      }
      Console.WriteLine();
   }
}
/* 
This code produces the following output.

mySL
  Count:    3
  Capacity: 16
  Keys and Values:
    -KEY-    -VALUE-
    First:    Hello
    Second:    World
    Third:    !
*/ 

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

using namespace System;
using namespace System::Collections;

public __gc class SamplesSortedList  {
public:
    static void PrintKeysAndValues(SortedList __gc *myList) {
        Console::WriteLine(S"\t-KEY-\t-VALUE-");
        for (int i = 0; i < myList->Count; i++) {
            Console::WriteLine(S"\t{0}:\t{1}", myList->GetKey(i), myList->GetByIndex(i));
        }
        Console::WriteLine();
    }
};

int main()  {

    // Creates and initializes a new SortedList.
    SortedList __gc *mySL = new SortedList();
    mySL->Add(S"First", S"Hello");
    mySL->Add(S"Second", S"World");
    mySL->Add(S"Third", S"!");

    // Displays the properties and values of the SortedList.
    Console::WriteLine(S"mySL");
    Console::WriteLine(S"  Count:    {0}", __box(mySL->Count));
    Console::WriteLine(S"  Capacity: {0}", __box(mySL->Capacity));
    Console::WriteLine(S"  Keys and Values:");
    SamplesSortedList::PrintKeysAndValues(mySL);
}

/* 
This code produces the following output.

mySL
Count:    3
Capacity: 16
Keys and Values:
-KEY-    -VALUE-
First:    Hello
Second:    World
Third:    !
*/ 

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

必要条件

名前空間: System.Collections

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

SortedList メンバ | System.Collections 名前空間 | IComparable | IComparer | IDictionary | Hashtable | カルチャを認識しないコレクションの操作の実行