Freigeben über


SortedList-Klasse

Stellt eine Auflistung von Schlüssel-Wert-Paaren dar, die nach Schlüsseln sortiert sind und auf die sowohl über Schlüssel als auch über Indizes zugegriffen werden kann.

Namespace: System.Collections
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class SortedList
    Implements IDictionary, ICollection, IEnumerable, ICloneable
'Usage
Dim instance As SortedList
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class SortedList : IDictionary, ICollection, IEnumerable, 
    ICloneable
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class SortedList : IDictionary, ICollection, IEnumerable, 
    ICloneable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class SortedList implements IDictionary, ICollection, 
    IEnumerable, ICloneable
SerializableAttribute 
ComVisibleAttribute(true) 
public class SortedList implements IDictionary, ICollection, 
    IEnumerable, ICloneable

Hinweise

Die generische Version dieser Auflistung finden Sie unter System.Collections.Generic.SortedList.

Auf ein SortedList-Element kann über dessen Schlüssel zugegriffen werden, wie bei einem Element in einer beliebigen IDictionary-Implementierung, oder über dessen Index, wie bei einem Element in einer beliebigen IList-Implementierung.

SortedList verwaltet intern zwei Arrays, in denen die Elemente der Liste gespeichert werden: In einem Array werden die Schlüssel und in dem anderen die zugeordneten Werte gespeichert. Jedes Element ist ein Schlüssel-Wert-Paar, auf das als DictionaryEntry-Objekt zugegriffen werden kann. Ein Schlüssel kann nicht NULL (Nothing in Visual Basic) sein, bei einem Wert ist dies hingegen möglich.

Bei der Kapazität einer SortedList handelt es sich um die Anzahl der Elemente, die die SortedList enthalten kann. Die anfängliche Standardkapazität für eine SortedList ist 0. Beim Hinzufügen von Elementen zur SortedList wird die Kapazität durch Neureservierung automatisch nach Bedarf erhöht. Die Kapazität kann über einen Aufruf von TrimToSize oder durch ein explizites Festlegen der Capacity-Eigenschaft verringert werden.

Die Elemente einer SortedList sind nach Schlüsseln sortiert: entweder entsprechend einer bestimmten, beim Erstellen der SortedList angegebenen IComparer-Implementierung, oder entsprechend der von den Schlüsseln selbst bereitgestellten IComparable-Implementierung. In beiden Fällen lässt SortedList keine doppelten Schlüssel zu.

Die Indexreihenfolge beruht auf der Sortierreihenfolge. Beim Hinzufügen eines Elements wird dieses in der korrekten Sortierreihenfolge in die SortedList eingefügt und der Index entsprechend angepasst. Beim Entfernen eines Elements wird auch der Index entsprechend angepasst. Daher kann sich der Index eines bestimmten Schlüssel-Wert-Paares ändern, wenn Elemente zur SortedList hinzugefügt oder aus dieser entfernt werden.

Operationen für eine SortedList werden wegen der Sortierung meist langsamer ausgeführt als Operationen für eine Hashtable. Jedoch bietet SortedList eine größere Flexibilität, da sowohl über zugeordnete Schlüssel als auch über Indizes auf die Werte zugegriffen werden kann.

Auf Elemente in dieser Auflistung kann mithilfe eines ganzzahligen Index zugegriffen werden. Diese Auflistung verwendet nullbasierte Indizes.

Für die foreach-Anweisung in C# (for each in Visual Basic) ist der Typ jedes Elements in der Auflistung erforderlich. Da jedes Element der SortedList ein Schlüssel-Wert-Paar ist, ist der Elementtyp nicht der Typ des Schlüssels oder Werts. Stattdessen ist der Elementtyp DictionaryEntry. Beispiel:

foreach (DictionaryEntry de in mySortedList) {...}
For Each de As DictionaryEntry In mySortedList
  ...
Next myDE

Die foreach-Anweisung ist ein Wrapper um den Enumerator, der nur das Lesen aus der Auflistung aber nicht das Schreiben in diese zulässt.

Beispiel

Im folgenden Beispiel wird gezeigt, wie eine SortedList erstellt und initialisiert wird und wie die entsprechenden Schlüssel und Werte ausgegeben werden.

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:    !
 
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:    !
*/ 
#using <system.dll>

using namespace System;
using namespace System::Collections;
public ref class SamplesSortedList
{
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();
   }

};

int main()
{
   
   // Creates and initializes a new SortedList.
   SortedList^ mySL = gcnew 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:" );
   SamplesSortedList::PrintKeysAndValues( mySL );
}

/* 
This code produces the following output.

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

public class SamplesSortedList
{
    public static void main(String[] args)
    {
        // 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}", 
            System.Convert.ToString(mySL.get_Count()));
        Console.WriteLine("  Capacity: {0}", 
            System.Convert.ToString(mySL.get_Capacity()));
        Console.WriteLine("  Keys and Values:");
        PrintKeysAndValues(mySL);
    } //main

    public static void PrintKeysAndValues(SortedList myList)
    {
        Console.WriteLine("\t-KEY-\t-VALUE-");
        for (int i = 0; i < myList.get_Count(); i++) {
            Console.WriteLine("\t{0}:\t{1}", myList.GetKey(i), 
                myList.GetByIndex(i));
        }
        Console.WriteLine();
    } //PrintKeysAndValues

} //SamplesSortedList

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

Vererbungshierarchie

System.Object
  System.Collections.SortedList

Threadsicherheit

Öffentliche statische (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

SortedList stellt eine gleichzeitige Unterstützung für mehrere Reader bereit, sofern die Auflistung nicht verändert wird. Zur Gewährleistung der Threadsicherheit von SortedList müssen alle Operationen unter Verwendung des Wrappers ausgeführt werden, der von der Synchronized-Methode zurückgegeben wird.

Die Enumeration einer Auflistung ist systemintern keine threadsichere Prozedur. Selbst wenn eine Auflistung synchronisiert ist, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Sie können während der Enumeration Threadsicherheit gewährleisten, indem Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen abfangen, die durch Änderungen ausgelöst werden, die von anderen Threads vorgenommen werden.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

SortedList-Member
System.Collections-Namespace
IComparable-Schnittstelle
IComparer-Schnittstelle
IDictionary-Schnittstelle
Hashtable-Klasse
System.Collections.Generic.SortedList

Weitere Ressourcen

Durchführen kulturunabhängiger Zeichenfolgenoperationen in Auflistungen