AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TList für Integer

Ein Thema von Coder · begonnen am 11. Jul 2023 · letzter Beitrag vom 11. Jul 2023
Antwort Antwort
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
206 Beiträge
 
Delphi 3 Professional
 
#1

TList für Integer

  Alt 11. Jul 2023, 13:51
Delphi-Version: 5
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
  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 ...

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 ...
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-

Geändert von Coder (11. Jul 2023 um 14:13 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TList für Integer

  Alt 11. Jul 2023, 14:20
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.
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
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TList für Integer

  Alt 11. Jul 2023, 14:32
Wozu so umständlich? Man konnte doch einfach den Integer auf Pointer casten und fertig.
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: TList für Integer

  Alt 11. Jul 2023, 14:42
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 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#5

AW: TList für Integer

  Alt 11. Jul 2023, 14:58
[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...
Angehängte Dateien
Dateityp: zip gentypedlist.zip (257,7 KB, 14x aufgerufen)
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
206 Beiträge
 
Delphi 3 Professional
 
#6

AW: TList für Integer

  Alt 11. Jul 2023, 16:02
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.
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
also so vor 20 Jahren und noch früher, soweit reicht.

Aber danke an Alle
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#7

AW: TList für Integer

  Alt 11. Jul 2023, 17:29
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

Geändert von mytbo (11. Jul 2023 um 17:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TList für Integer

  Alt 11. Jul 2023, 18:40
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;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz