Wenn ich mich Java-Problemen annähere, verwende ich das Sammlungsmuster. Es ist jedoch ein Albtraum, es in Delphi zu tun, da es kein Integer-Objekt gibt, mit dem man umgehen kann.
Ich brauche eine Datenstruktur, die Zahlen enthält. Ich möchte in der Lage sein, Nummern hinzuzufügen, Nummern zu entfernen und den Inhalt der Sammlung zu überprüfen, und jede Nummer muss eindeutig sein.
Ich bin nicht an einer Lösung interessiert, die ich selbst implementieren und testen muss. Gibt es ein bereites Objekt wie Java HashTable?
Ich weiß, dass es schmutzig ist, aber Sie könnten TStringList
missbrauchen (oder %Co_de% ).
Delphi-Container-Klasse in der VCL-Bibliothek "Standard" ist schlecht. Dies ist ein seit langem bestehendes Problem, das in den letzten Versionen nur teilweise korrigiert wurde. Wenn Sie Delphi & gt; = 2009 verwenden, verfügen Sie über eine Generics-Klasse, die auch Integer-Datentypen verarbeiten kann, bevor Sie Ihre eigene Klasse schreiben müssen, TList auf nicht standardmäßige Weise verwenden oder eine Bibliothek eines Drittanbieters verwenden. Wenn Sie Zahlen speichern müssen, wenn sie höchstens 32 Bit lang sind, können Sie sie in einer TList speichern, indem Sie sie zu und von Zeigern umwandeln. Sie müssen die Add () - Methode überschreiben, um die Eindeutigkeit sicherzustellen. Sie können auch TBits verwenden und den entsprechenden "Slot" auf true setzen. Andernfalls müssen Sie Bibliotheken von Drittanbietern wie die JCL (kostenlos) oder DIContainers (kommerziell), zum Beispiel.
Sie können eine TList verwenden, um eine Gruppe von ganzen Zahlen zu speichern. Es soll Pointer speichern, aber da Pointer nur ganze Zahlen sind, funktioniert es perfekt beim Speichern von Ganzzahlen.
Dies ist eine einfache Lösung für die Delphi-Version mit Generics:
%Vor%Und wenn eine Leistung mit vielen ganzen Zahlen wichtig ist, können Sie die Liste sortiert halten und das binäre Programm verwenden
Persönlich empfehle ich dringend, DeCAL zum Speichern von Daten zu verwenden. Es verfügt über einen DMap-Container, der fast jeden Datentyp verarbeiten kann, ist selbstoptimiert, da er eine interne Rot-Schwarz-Struktur verwendet und Duplikate nicht hinzufügen können (wenn du Duplikate einfügen musst, kannst du DMultiMap verwenden). Eine andere tolle Sache mit DMap ist, dass das Finden von Elementen in der Liste sehr schnell ist (viel schneller als in TStringList). Die Arbeit mit DeCal ist etwas anders als bei anderen Delphi-Bibliotheken, aber sobald Sie damit vertraut sind, werden Sie keine StringList in Ihrem Code verwenden.
Bearbeiten: ältere Version von DeCAL ist auf SourceForge , aber hier können Sie große pdf Handbuch finden.
Delphi hat unit mxarrays (Decision Cube), es gibt eine Klasse TIntArray, setze ihre Eigenschaft Duplicates auf dupIgnore. Es kann auch Werte sortieren. Wenn Sie es verwenden möchten, finden Sie unter Quality Central Report #: 2703 Informationen zur Behebung des Fehlers in dieser Einheit .
Tags und Links delphi data-structures collections