![]() |
Delphi-Version: 5
TList für Integer
Moin,
ja und zwar wollt ich mal fragen u.a. auch anlässlich der ![]() an diser Stelle natürlich auch mein Glückwunsch! und weil es mich immerschonmal interessiert hat: Warum hat man bis vor 10 Jahren unter Delphi keine Liste für Integer gebraucht, gewünscht (nicht gekonnt?) bzw. wo hat man die Integer gelassen? Nur in einem Array? oder TFrickelliste? Warum gab es zwar eine TStringlist, aber kein bequemes Pendant für immerhin die Integer (wenn auch Flieskommazahlen sicherlich schwerer zu speichern sind). Gut, klar mit Tlist und Pointern kann ich mir da was zusammenmatschen. Muß aber selber vor dem PointerZuweisen dafür Speicher reservieren, adde das an die Liste, rufe es wieder ab und muß anschließend erst den Speicher für den Pointer wieder mit Dispose freigeben, bevor ich es von der Liste löschen kann (also den Pointer). Das ist/war doch undurchsichtiges, fehlerträchtiges Gefrickel. (s.u.) OKOK, an eine Tlist kann ich Daten aller Formate und Typen, sowie beliebiger Länge dranklatschen. und - OK, ja, seit 2011 oder wann kann ich mir auch eine mit
Delphi-Quellcode:
durch Generische Collections basteln.
List: TList<Integer>;
Aber wie um Himmelswillen hat man das früher gemacht?? - und warum hat man sich das vor 2011 nicht einfacher gemacht???!! 1980 Nen visuellen Editor, Compiler und Linker in 80 kb (!!!) gepresst, später dann die C++-Builder-IDE mittels Delphi erstellt u. compiliert, damit man's einfacher hatte, in den 20 Jahren aber keine Zeit für ne Titnegerlist gehabt???! Boarland .... embargodero ... Menschenskinder ... :P
Delphi-Quellcode:
Kann sich da noch jemand dran erinnern, warum man das nicht eher gemacht hat?
function bla(a: String);
var tl : Tlist; p : ^Integer; begin tl := Tlist.create; new(p); p^ := 2; // Zahl 2 zuweisen tl.add( p); p := tl[0]; self.Caption := inttostr((p^)); // z.B. Ausgabe / Bsp.-Weiterverarbeitung dispose(p); tl.Delete(0); tl.free; end; // Function OK, bei Integern bin ich da nicht auf Länge von 2147483648 oder Cardinal beschränkt. mein Workaround war immer:
Delphi-Quellcode:
Ok, geht vielleicht auch als langjähriger Programmierer sicher eleganter)
var ts: tStringlist;
begin ts := tStringlist.Create; ts.add(inttostr(2)); ts.add(inttostr(5)); ts.add(inttostr(7)); form1.zahl := strtoint(ts[1]) * 3); // gleich Sechs (als Zahl weiterverarbeiten) ts.delete(ts.count-2);// die 5; od. einfach gleich alle drei löschen: ts.delete(0);ts.delete(0);ts.delete(0); // optional ts.free; Aber was hätte ich mich über eine einfache Lösung für Integer gefreut ... |
AW: TList für Integer
Irgendwie verstrehe ich dich nicht so recht. Wo ist das Problem?
TList<Integer> ist doch die Lösung. Warum man die nicht schon früher gemacht hat? Gabs seit ca. 2009. :-D Und wozu überhaupt eine Liste von Integer? Das ergäbe das gleiche Geschwür wie die TStringlist - etwas das für alles mögliche missbraucht wird. Pascal war schon immer eine Sprache wo man sich die Datentypen so machen konnte wie es der Wirklichkeit entspricht - und das sollte man auch tun. So - genug geranted ;-) |
AW: TList für Integer
Wozu so umständlich? Man konnte doch einfach den Integer auf Pointer casten und fertig.
Delphi-Quellcode:
So ein Gedöns mit 32/64 Bit, was da unter Umständen Probleme machen könnte, gab es "damals" noch nicht. Und wenn man weiß, dass in der Liste nur Integer verwaltet werden sollen, dann folgt man halt nicht den Pointern, sondern nutzt den Pointer in der Liste direkt als gespeichertes Datum (im Sinne von Singular von "Daten", nicht Zeitpunkt).
MyList.Add(Pointer(MyInteger));
Ist zwar nicht so ganz sauber, aber war afaik durchaus gängige Praxis vor der Einführung von Generics. |
AW: TList für Integer
Zitat:
Delphi-Quellcode:
die Kontrolle über die Parameter und Rückgabewerte übernimmt, sollte es da überhaupt keine Probleme geben. Es würde mich nicht wundern, wenn solche privat sicher irgendwo eingesetzten Konstrukte den Sprung nach 64-Bit ohne einen Mucks überstanden hätten.
TIntegerList = class(TList)
|
AW: TList für Integer
Liste der Anhänge anzeigen (Anzahl: 1)
[QUOTE=Coder;1524436]Moin,
ja und zwar wollt ich mal fragen u.a. auch anlässlich der ![]() an diser Stelle natürlich auch mein Glückwunsch! und weil es mich immerschonmal interessiert hat: Warum hat man bis vor 10 Jahren unter Delphi keine Liste für Integer gebraucht, gewünscht (nicht gekonnt?) bzw. wo hat man die Integer gelassen? /QUOTE] Ich hatte mir damals (bevor es generics gab) einen kleinen Kodegenerator gebaut, der für einen gewünschten Datentyp eine typsicherte Listenklasse erzeugt hat. Mal sehn..., ja, hab ich sogar noch rumliegen, siehe Anhang... |
AW: TList für Integer
Zitat:
Ich meinte aber durchaus lange vor 2009/11 ....sehr lange :D also so vor 20 Jahren und noch früher, soweit reicht. Aber danke an Alle |
AW: TList für Integer
Zitat:
Code:
Es gab seit Delphi 2 Alternativen, auch eine kommerzielle Sammlung. Danach die JCL. Heute bevorzugt Spring4D oder mORMot und zur Not die Bordmittel. Embarcadero bemüht sich seit einigen Jahren.
The maps provided in this library are generic - they can hold Delphi's atomic types (integer, real, string, etc.) and they can also hold objects. And like Delphi's TStringList, maps are associative containers - they store things in pairs so that given one you can get the other. But where TStringList can only associate objects with strings, maps can be used to associate strings with objects, or integers with characters, ... or whatever you want.
Bis bald... Thomas |
AW: TList für Integer
Ich habe das mit Include-Dateien gelöst. Damit konnte man auch z.B. mit Delphi 5 quasi-generische Listen erzeugen und per IFDEF ließen sich diese ab Delphi 2009 1:1 genauso nutzen.
So ungefähr:
Delphi-Quellcode:
Nutzung:
uses
Contnrs; type TMyListEntry = class private FData: Integer; public constructor Create(const AData: Integer); property Data: Integer read FData write FData; end; TTypedListItem = TMyListEntry; {$include 'TypedList.inc'} TMyList = class(TTypedList) end; implementation {$define Implementation} {$include 'TypedList.inc'} end.
Delphi-Quellcode:
var
List: TMyList; NewItem: TIntegerValue; begin List := TMyList.Create(); try List.Add(TMyList.Create(42)); for i := 0 to MyList.Count - 1 do ShowMessage(IntToStr(MyList[i].Data)); finally List.Free(); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz