Ответ 1
Стандартные коллекции не предлагают общий набор классов. Библиотеки сторонних коллекций, такие как 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;
Я не компилировал этот код, поэтому вам, возможно, придется исправить любые ошибки, которые я сделал. Вы, скорее всего, захотите расширить его, чтобы быть более способным. Но, надеюсь, это может показать вам, как начать.