Welche Delphi-Datenstruktur kann eine Liste eindeutiger Ganzzahlen enthalten?

8

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?

    
none 12.10.2010, 11:57
quelle

9 Antworten

6

Ich weiß, dass es schmutzig ist, aber Sie könnten TStringList missbrauchen (oder %Co_de% ).

%Vor%     
splash 12.10.2010, 12:05
quelle
20
%Vor%

GpLists wird mit einer BSD-Lizenz geliefert. Es enthält auch eine Klasse mit 64-Bit-Ganzzahlen - TGpInt64List - und eine Menge anderer Sachen.

    
gabr 12.10.2010 12:40
quelle
8

Dictionary<Integer,Boolean> oder ähnlich würde tun.

    
Barry Kelly 28.10.2010 16:04
quelle
5

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.

    
user160694 12.10.2010 12:23
quelle
4

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.

    
Toby Allen 01.05.2011 08:29
quelle
3

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

    
Martijn van der Kooij 25.05.2013 20:15
quelle
1

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.

    
Linas 12.10.2010 16:37
quelle
1

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 .

    
Schnider 13.10.2010 14:47
quelle
0

Ja, gibt es, heißt es TDictionary

    
radu122 21.08.2013 07:06
quelle