Delphi'de bir HashSet var mı?Delphi'de bir HashSet var mı?
En fazla 255 ürün için set can kullanıyorum. En son Delphi Derleyicisinde bir HashSet var mı? XE8, Seattle
Delphi'de bir HashSet var mı?Delphi'de bir HashSet var mı?
En fazla 255 ürün için set can kullanıyorum. En son Delphi Derleyicisinde bir HashSet var mı? XE8, Seattle
Standart koleksiyonlar genel bir grup sınıfı sunmaz. Spring4D gibi üçüncü parti koleksiyon kütüphaneleri yapar.
Genel bir ayar sınıfı TDictionary<K, V>
üstünde oldukça kolay bir şekilde oluşturabilirsiniz. Bir çıplak kemikleri sürümü bu gibi görünebilir: Eğer benim yaptığım yanlışlıkları düzeltmeleri gerekebilir böylece
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;
Ben, bu kodu derlenmiş ettik. Daha yetenekli olmak için onu genişletmek isteyeceksiniz. Ama umarım bu size nasıl başlayacağınızı gösterir.
Bunun için TDictionary
kullanabilirsiniz. İzlemek istediğiniz şey olmak için TKey
tip parametresini tanımlayın. TValue
tip parametresi herhangi bir şey olabilir; kullanmayacaksın. (Perl ayrıca seti türünü yoksun ve böylece kongre Burada önerdiğim şey aynı şekilde onun karma türünü kullanmaktır.)
Çağrı ContainsKey
üyeliğini kontrol etmesi. Eklemek için Add
veya AddOrSetValue
kullanın; Silmek için Remove
.
Kullanılmayan TValue
parametresini gizleyen bir sarıcı yazmak önemli bir alıştırma olacaktır.
AFAIK Delphi bir HashSet uygulaması içermez, ancak bir THashSet içeren [Spring4D] (https://bitbucket.org/sglienke/spring4d) projesini deneyebilirsiniz. – RRUZ