2010年04月29日

Delphi:連想配列

Delphi2009のTDictionaryクラスを使って連想配列と同等のことができる。
ただ存在しないキーでは例外が発生するので、以下のようにTDictionaryを継承してItemsプロパティを変えてやれば、存在しないキーは参照時は型の初期値を返し、設定時はリストに追加されるようになる。
uses節にGenerics.Collectionsを追加。

THash<TKey,TValue> = class(TDictionary<TKey,TValue>)
private
  function GetItem(const Key: TKey): TValue;
  procedure SetItem(const Key: TKey; const Value: TValue);
public
  property Items[const Key: TKey]: TValue read GetItem write SetItem; default;
end;

{ THash<TKey, TValue> }

function THash<TKey, TValue>.GetItem(const Key: TKey): TValue;
begin
  TryGetValue(Key, Result);
end;

procedure THash<TKey, TValue>.SetItem(const Key: TKey;
  const Value: TValue);
begin
  AddOrSetValue(Key, Value);
end;

//---------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  dic: THash<string, string>;
begin
  dic := THash<string, string>.Create;
  try
    dic['東京都'] := '新宿区';
    dic['埼玉県'] := 'さいたま市';
    dic['神奈川県'] := '横浜市';
    Memo1.Lines.Add(dic['東京都']);
    Memo1.Lines.Add(dic['埼玉県']);
    Memo1.Lines.Add(dic['神奈川県']);
    Memo1.Lines.Add(dic['来来軒']);
  finally
    dic.Free;
  end;
end;


posted by 忘却の達人 at 07:16| Comment(0) | TrackBack(0) | Delphi | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。