C'è un HashSet in Delphi?C'è un HashSet in Delphi?
So che l'utilizzo del set può contenere al massimo 255 articoli. Esiste un HashSet nell'ultimo compilatore Delphi, ad es. XE8, Seattle
C'è un HashSet in Delphi?C'è un HashSet in Delphi?
So che l'utilizzo del set può contenere al massimo 255 articoli. Esiste un HashSet nell'ultimo compilatore Delphi, ad es. XE8, Seattle
Le raccolte standard non offrono una classe set generica. Le raccolte di raccolte di terze parti come Spring4D fanno.
È possibile creare facilmente una classe set generica su TDictionary<K, V>
. Una versione ossa nude potrebbe essere simile a questo:
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;
Non ho compilato questo codice, quindi potrebbe essere necessario per correggere eventuali errori che ho fatto. Probabilmente vorrai estenderlo per essere più capace. Ma spero che questo possa mostrarti come iniziare.
È possibile utilizzare TDictionary
per quello. Definisci il parametro di tipo TKey
come la cosa che desideri monitorare. Il parametro di tipo TValue
può essere qualsiasi cosa; non lo userai. (Perl manca anche un set tipo, e così convenzione è quello di utilizzare la sua hash tipo nello stesso modo che sto suggerendo qui.)
chiamata ContainsKey
per verificare l'appartenenza. Utilizzare Add
o AddOrSetValue
da inserire; Remove
da eliminare.
Sarebbe un esercizio banale scrivere un wrapper che nasconde il parametro TValue
inutilizzato.
AFAIK Delphi non include un'implementazione HashSet, ma puoi provare il progetto [Spring4D] (https://bitbucket.org/sglienke/spring4d) che include un 'THashSet'. – RRUZ