System.Generics.Collections.TDictionary

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

System.Generics.Collections.TEnumerableSystem.TObjectTDictionary

Delphi

TDictionary<K,V> = class(TEnumerable<TPair<K,V>>)

C++

template<typename K, typename V> class PASCALIMPLEMENTATION TDictionary__2 : public TEnumerable__1<TPair__2<K,V> >

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
class public
System.Generics.Collections.pas
System.Generics.Collections.hpp
System.Generics.Collections System.Generics.Collections


Beschreibung

Sammlung von Schlüssel/Wertepaaren.

TDictionary repräsentiert eine generische Sammlung von Schlüssel/Wertepaaren.

Diese Klasse stellt eine Zuordnung von einer Schlüsselsammlung zu einer Wertesammlung bereit. Wenn Sie ein TDictionary-Objekt erstellen, können Sie Parameter für Anfangskapazität, Gleichheitsoperation und Anfangsinhalt festlegen.

Sie können mit den Methoden Add oder AddOrSetValue einen Schlüssel hinzufügen, der einem entsprechenden Wert zugeordnet ist. Einträge können Sie mit Remove oder mit Clear entfernen (entfernt alle Schlüssel/Wertepaare). Das Hinzufügen und Entfernen eines Schlüssel/Wertepaares und das Nachschlagen eines Schlüssels sind effizient (gegen O(1)), weil Schlüssel in einer Hash-Liste organisiert sind. Ein Schlüssel darf nicht nil sein (obwohl ein Wert nil sein kann), und es muss eine Gleichheitsoperation für Schlüssel vorhanden sein.

Sie können das Vorhandensein von Schlüsseln und Werten mit den Methoden TryGetValue, ContainsKey und ContainsValue testen.

Die Eigenschaft Items führt alle Dictionary-Einträge auf. Durch Indizieren der Eigenschaft Items können auch Werte festgelegt und abgerufen werden. Wird ein Wert auf diese Weise festgelegt, wird ein bereits vorhandener Wert überschrieben.

Die Klasse TObjectDictionary stammt von TDictionary ab und stellt einen automatischen Mechanismus für die Freigabe von Objekten bereit, die aus Dictionary-Einträgen entfernt wurden.

Zugriffsmethoden

Dieser Abschnitt enthält eine Übersicht über die Methoden zum Lesen und Schreiben von TDictionary oder TObjectDictionary, einschließlich der Auswirkung doppelter Schlüssel beim Schreiben oder des Nicht-Findens von Schlüsseln beim Lesen.

Write

Methode Indextyp   Werttyp   Bei doppeltem Schlüssel
Add TKey TValue Exception
AddOrSetValue TKey TValue Überschreiben
Items TKey TValue Überschreiben
TryAdd TKey TValue false

Lesen

Methode Index/Eingabetyp   Ergebnistyp Bei Schlüssel nicht gefunden Bemerkungen
ContainsKey TKey Boolean false True = gefunden
ContainsValue TValue Boolean n/a True = gefunden
ExtractPair TKey TPair Standardpaar Gibt TPair zurück, entfernt den Eintrag aus dem Dictionary
Items TKey TValue Exception Verwenden Sie TryGetValue, um eine Exception zu vermeiden
operator [] TKey TValue Exception Nur C++
Keys n/a TKeyCollection n/a
ToArray n/a TArray<TPair<TKey,TValue>> n/a
TryGetValue TKey TValue, Boolean Standard, false Gibt TValue zurück
Values n/a TValueCollection n/a


Iteration

Im Folgenden finden Sie einige Beispiele, bei denen im Code Iterationen durch den Inhalt des Dictionary verwendet werden.

Delphi

uses System.Generics.Collections;
procedure TForm1.Button1Click(Sender: TObject);
var
  MyDict: TDictionary<string, TForm>;
begin
  MyDict:= TDictionary<string, TForm>.Create;
  try
    MyDict.Add('Form1', Self);
    for var Enum in MyDict do
      ShowMessage(Enum.Key);
  finally
    MyDict.Free;
  end;
end;
Beachtung: Bei der Verwendung von TDictionary müssen Sie den Namespace System.Generics.Collections verwenden.

C++

#include <memory>
#include <system.Generics.Collections.hpp>
 
void __fastcall TForm2::Button1Click(TObject *Sender)
{
  std::unique_ptr<TDictionary__2<String, String>>
  strdict(new TDictionary__2<String, String>());
 
  strdict->Add("Form1", "A Value");
  for(const TPair__2<String,String> &pair: strdict.get()) {
    ShowMessage(pair.Value);
  }
}
Tipp: Da C++ nur Code für C++-Templates generieren kann, sollten im Code STL-Sammlungen (std::map) und nicht Delphi-Generics-Sammlungen (TDictionary) verwendet werden.
Hinweis: Da C++ Delphi-Generics nicht instanziieren kann, dürfen im C++-Code nur Delphi-Generics mit Typen verwendet werden, für die Generics im Delphi-Code instanziiert wurden.

Siehe auch

Codebeispiele