Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList für Integer (https://www.delphipraxis.net/213331-tlist-fuer-integer.html)

Coder 11. Jul 2023 12:51

Delphi-Version: 5

TList für Integer
 
Moin,

ja und zwar wollt ich mal fragen u.a. auch anlässlich der
https://www.delphipraxis.net/213266-...-new-post.html

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:
  List: TList<Integer>;
durch Generische Collections basteln.

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:
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
Kann sich da noch jemand dran erinnern, warum man das nicht eher gemacht hat?
OK, bei Integern bin ich da nicht auf Länge von 2147483648 oder Cardinal beschränkt.

mein Workaround war immer:
Delphi-Quellcode:
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;
Ok, geht vielleicht auch als langjähriger Programmierer sicher eleganter)
Aber was hätte ich mich über eine einfache Lösung für Integer gefreut ...

freimatz 11. Jul 2023 13:20

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 ;-)

Gausi 11. Jul 2023 13:32

AW: TList für Integer
 
Wozu so umständlich? Man konnte doch einfach den Integer auf Pointer casten und fertig.
Delphi-Quellcode:
MyList.Add(Pointer(MyInteger));
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).

Ist zwar nicht so ganz sauber, aber war afaik durchaus gängige Praxis vor der Einführung von Generics.

Uwe Raabe 11. Jul 2023 13:42

AW: TList für Integer
 
Zitat:

Zitat von Gausi (Beitrag 1524439)
So ein Gedöns mit 32/64 Bit, was da unter Umständen Probleme machen könnte, gab es "damals" noch nicht.

Wäre auch wohl egal, denn man kann einen Integer auch problemlos in einem 64-Bit Pointer unterbringen. Da man ja mit einer entsprechend typisierten Ableitung
Delphi-Quellcode:
TIntegerList = class(TList)
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.

peterbelow 11. Jul 2023 13:58

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
https://www.delphipraxis.net/213266-...-new-post.html

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...

Coder 11. Jul 2023 15:02

AW: TList für Integer
 
Zitat:

Zitat von freimatz (Beitrag 1524437)
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

naja, ich hatte da nun nicht so drauf geachtet, wann das eingeführt wurde. Erste Forenbeiträge dazu fand ich per google so ab 2011.

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

mytbo 11. Jul 2023 16:29

AW: TList für Integer
 
Zitat:

Zitat von Coder (Beitrag 1524436)
Aber wie um Himmelswillen hat man das früher gemacht??
- und warum hat man sich das vor 2011 nicht einfacher gemacht???!!

Früher hat man z.B. die Bibliothek "Generic Associative Containers for Delphi (2, 3, 4, & 5) by Robert R. Marsh, S.J." verwendet.
Code:
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.
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.

Bis bald...
Thomas

jaenicke 11. Jul 2023 17:40

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:
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.
Nutzung:
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