System.Generics.Collections.TDictionary

提供: RAD Studio API Documentation
移動先: 案内検索

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> >

プロパティ

種類 可視性 ソース ユニット
class public
System.Generics.Collections.pas
System.Generics.Collections.hpp
System.Generics.Collections System.Generics.Collections


説明

キー/値ペアのコレクション

TDictionary は、キー/値ペアの汎用コレクションを表します。

このクラスは、キーのコレクションから値のコレクションへのマッピングを提供します。TDictionary オブジェクトを作成する際、初期容量、等価演算、初期コンテンツなどのパラメーターを指定できます。

Add メソッドまたは AddOrSetValue メソッドで、対応する値を関連づけるキーを追加することができます。Remove または Clear(すべてのキー/値ペア削除する)でエントリを削除することができます。キー/値ペアの追加や削除、およびキーの検索は、キーがハッシュされるため O(1)に近く効率的です。キーは nil にすることはできず(値は nil になり得ますが)、また、キーには等価比較演算がなければなりません。

TryGetValueContainsKeyContainsValue の各メソッドで、キーや値の存在を確認することができます。

Items プロパティは、すべての辞書のエントリをリストします。また、Items プロパティをインデックス化することで、値を設定および取得することができます。この方法を値を設定すると、既存の値は上書きされます。

クラス TObjectDictionaryTDictionary から派生しており、ディクショナリ エントリからオブジェクトを解放するための自動メカニズムを提供します。

アクセス メソッド

このセクションでは、TDictionaryTObjectDictionary の読み書きのためのメソッドについて概説します。書き込み時のキーの重複の影響や、読み込み時にキーが見つからない場合などについても触れられています。

書き込み

メソッド インデックスの型   値の型   重複キーの場合
Add TKey TValue 例外
AddOrSetValue TKey TValue 上書き
Items TKey TValue 上書き

読み込み

メソッド インデックス/入力の型   結果の型 キーが見つからなかった場合 メモ
ContainsKey TKey Boolean false True = 見つかった
ContainsValue TValue Boolean N/A True = 見つかった
ExtractPair TKey TPair デフォルトのペア TPair を返し、アイテムをディクショナリから削除
Items TKey TValue 例外 TryGetValue を使用すると例外を回避できる
operator [] TKey TValue 例外 C++ のみ
Keys N/A TKeyCollection N/A
ToArray N/A TArray<TPair<TKey,TValue>> N/A
TryGetValue TKey TValue, Boolean デフォルト、false TValue を返す
Values N/A TValueCollection N/A


反復処理

以下に、いくつかの例を示します。コードでは、辞書のコンテンツを繰り返し使用しています。

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;
注意: TDictionary を使用する際、System.Generics.Collections ネームスペースを使用しなければなりません。

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);
  }
}
ヒント: C++ は、C++ テンプレート用のコードしか生成しないため、コードは Delphi ジェネリックのコレクション(TDictionary)ではなく、STL コレクション(std::map)を使用する必要があります。
メモ: C++ は Delphi ジェネリック型をインスタンス化できないため、C++コードは、Delphi コードでジェネリック型がインスタンス化されている型のDelphi ジェネリック型のみを使用する必要があります。

関連項目

コード サンプル