DelphiにHashSetがありますか?DelphiにHashSetがありますか?
私は知っているセットを使用することができます知っているほとんど255アイテムを保持します。最新のDelphiコンパイラにはHashSetがありますか? XE8、シアトル
DelphiにHashSetがありますか?DelphiにHashSetがありますか?
私は知っているセットを使用することができます知っているほとんど255アイテムを保持します。最新のDelphiコンパイラにはHashSetがありますか? XE8、シアトル
標準のコレクションでは、一般的なセットクラスは提供されていません。 Spring4Dのようなサードパーティのコレクションライブラリはそうします。
TDictionary<K, V>
の上に汎用セットクラスを簡単に作成できます。裸の骨のバージョンは次のようになります。あなたは私が作った間違いを修正する必要があるかもしれませんので、
type
TSet<T> = class
private
FDict: TDictionary<T, Integer>;
public
constructor Create;
destructor Destroy; override;
function Contains(const Value: T): Boolean;
procedure Include(const Value: T);
procedure Exclude(const Value: T);
end;
....
constructor TSet<T>.Create;
begin
inherited;
FDict := TDictionary<T, Integer>.Create;
end;
destructor TSet<T>.Destroy;
begin
FDict.Free;
inherited;
end;
function TSet<T>.Contains(const Value: T): Boolean;
begin
Result := FDict.ContainsKey(Value);
end;
procedure TSet<T>.Include(const Value: T);
begin
FDict.AddOrSetValue(Value, 0);
end;
procedure TSet<T>.Exclude(const Value: T);
begin
FDict.Remove(Value);
end;
私は、このコードをコンパイルしていませんでした。もっと能力を伸ばすためにそれを拡張したいと思うでしょう。しかし、うまくいけば、これは始める方法を示すことができます。
これにはTDictionary
を使用できます。 TKey
タイプのパラメータをトラッキングするものとして定義します。 TValue
タイプのパラメータは何でもかまいません。あなたはそれを使用しません。 (Perlはまたセット種類を欠いて、その大会は、私がここに示唆しています同様にそのハッシュタイプを使用することです。)
コールContainsKey
は、メンバーシップを確認すること。挿入にはAdd
またはAddOrSetValue
を使用してください。 Remove
を削除してください。
未使用のTValue
パラメータを隠すラッパーを書くのは簡単なことです。
AFAIK DelphiにはHashSet実装は含まれていませんが、[Spring4D](https://bitbucket.org/sglienke/spring4d)プロジェクトでは、 'THashSet' – RRUZ