![]() |
Position eines Objekts im Array
Hey,
ich würde gerne wissen, an welcher Stelle sich ein Objekt im Array befindet. Die Funktion sollte aber mit verschiedenen Array-Typen kompatibel sein. Ich will keine TList, TObjectList verwenden, auch wenn diese die passende Funktion "IndexOf" mitliefern. Ist es überhaupt möglich für ein "Array of Txyz" den gleichen Code zum heraus- finden der Position zu benutzen, wie für ein "Array of Tabc"? Mein Wissen über Pointer ist begrenzt, aber ich will nicht extra einen neuen Typen definieren, um der Funktion das entsprechende Array übergeben zu können, deshalb muss ich Pointer verwenden. Mein Problem:
Delphi-Quellcode:
kann nicht funktionieren, weil ich den Pointer pArrayPointer nicht als
function Where(pArrayPointer, pObjekt: Pointer):integer;
var i:integer; begin while ((pArrayPointer[i])<>pObjekt) and (i<10000) do inc(i); result:=i; end; Array definiere. Wie deklariere ich ihn als "allgemeines Array"? Oder geht das nicht und ich muss das irgendwie so machen?:
Delphi-Quellcode:
Hier auch das selbe Problem wie oben, wie sage ich Delphi, dass der Pointer auf ein "Array of pabc" zeigt?
function Where(pabcArrayPointer, pdefArrayPointer, pObjekt: Pointer):integer;
var i:integer; begin if pabcArrayPointer <> nil then while ((pabcArrayPointer[i])<>pObjekt) and (i<10000) do inc(i); if pdefArrayPointer <> nil then while ((pdefArrayPointer[i])<>pObjekt) and (i<10000) do inc(i); result:=i; end; |
Re: Position eines Objekts im Array
Warum willst du ein dynamisches Array mit Referenztypen (String ausgenommen) verwenden? Dazu sind sie nicht gedacht, dafür gibt es TObjectList.
|
Re: Position eines Objekts im Array
Weil ich es für sehr unpraktisch bewerte,
bei jedem Zugriff den Typen des Objekts der TObjektList angeben zu müssen. Außerdem ist dies die einzige Funktion, welche ich aus der Palette der Methoden und Attribute der TObjektList gebrauchen könnte. Und so kompliziert ist mein Problem doch vermutlich auch nicht, oder irre ich? |
Re: Position eines Objekts im Array
Kannst du bitte die komplette Fensterbreite ausnutzen? Ich komme mir vor, als ob ich ein Gedicht lesen würde ;) .
Zitat:
Wenn du es trotzdem per Pointer versuchen willst: Zitat:
|
Re: Position eines Objekts im Array
Zitat:
gerne. :D Danke für den Tip, ich verwende jetzt ![]() Ich empfinde das schreiben und lesen in dieser Textbreite als angenehmer. Auch die Medizin bestätigt übrigens eine relativ geringe Textbreite als zum Lesen perfekt! Aber wenn Mehrere dies als störend emp- finden gebe ich mich auch mit der +3/4 der jetzigen Breite zufrieden. :) |
Re: Position eines Objekts im Array
Zitat:
Aber aus typographischen Gesichtspunkten hast Du absolut Recht. Leider ist das hier kein typographischer Verein, sondern ein Forum, wo man viel Information auf wenig Höhe unterbringen will. Wem der Text zu breit ist, der verkleinert sein Browserfenster. DAS ist die wahre Freiheit der Typographie! |
Re: Position eines Objekts im Array
Zitat:
Damits nicht nur OT ist hier die Funktion, die ich aus Interesse doch noch mal zu Ende geschrieben habe: Vielleicht kann sie ja doch nochmal wer gebrauchen, der genauso schlecht mit Pointern ist, wie ich: :D
Delphi-Quellcode:
TPointerDynArray = array of Pointer;
Delphi-Quellcode:
Aufruf:
function Where(pArrayPointer:TPointerDynArray; pObject: Pointer):integer;
var i:integer; begin i:=0; while (pArrayPointer[i] <> pObject) and (i<high(pArrayPointer)) do inc(i); result:=i; end;
Delphi-Quellcode:
mit
position:=where(TPointerDynArray(abc), Pointer(def));
abc: array of Twhatever; und def: TWhatever. Edit: Ein Problem gibts natürlich, wenn das Objekt nicht drin ist. ;) |
Re: Position eines Objekts im Array
Zitat:
Delphi-Quellcode:
function Where(pArrayPointer: TObjectDynArray; pObjekt: TObject):integer;
var i:integer; a: Array of Pointer; begin for i := 0 to Length(pArrayPointer) - 1 do if pArrayPointer[i] = pObjekt then begin Result := i; Exit; end; Result := -1; end; |
Re: Position eines Objekts im Array
Um einiges eleganter. :)
Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 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