AGB  ·  Datenschutz  ·  Impressum  







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

Position eines Objekts im Array

Ein Thema von TheAn00bis · begonnen am 3. Apr 2006 · letzter Beitrag vom 3. Apr 2006
Antwort Antwort
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

Position eines Objekts im Array

  Alt 3. Apr 2006, 18:42
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:
function Where(pArrayPointer, pObjekt: Pointer):integer;
var i:integer;
begin
  while ((pArrayPointer[i])<>pObjekt) and (i<10000) do inc(i);
  result:=i;
end;
kann nicht funktionieren, weil ich den Pointer pArrayPointer nicht als
Array definiere. Wie deklariere ich ihn als "allgemeines Array"?
Oder geht das nicht und ich muss das irgendwie so machen?:

Delphi-Quellcode:
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;
Hier auch das selbe Problem wie oben, wie sage ich Delphi, dass der Pointer auf ein "Array of pabc" zeigt?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 18:46
Warum willst du ein dynamisches Array mit Referenztypen (String ausgenommen) verwenden? Dazu sind sie nicht gedacht, dafür gibt es TObjectList.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#3

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 18:55
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?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 19:19
Kannst du bitte die komplette Fensterbreite ausnutzen? Ich komme mir vor, als ob ich ein Gedicht lesen würde .
Zitat:
Weil ich es für sehr unpraktisch bewerte,
bei jedem Zugriff den Typen des Objekts
der TObjektList angeben zu müssen.
Dafür gibt es Templates, dann hast du auch ohne Generics in 5 Sekunden eine strongly typed List. Ein dynamisches Array ist einfach unschön.
Wenn du es trotzdem per Pointer versuchen willst:
Zitat:
type
TPointerDynArray = Array of Pointer;

function Where(pArrayPointer: TPointerDynArray; pObjekt: Pointer):integer;
Alle Array of Referenztyp lassen sich dann nach TPointerDynArray casten.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#5

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 19:57
Zitat von Khabarakh:
Kannst du bitte die komplette Fensterbreite ausnutzen? Ich komme mir vor, als ob ich ein Gedicht lesen würde .
Zitat:
Weil ich es für sehr unpraktisch bewerte,
bei jedem Zugriff den Typen des Objekts
der TObjektList angeben zu müssen.
Dafür gibt es Templates, dann hast du auch ohne Generics in 5 Sekunden eine strongly typed List. Ein dynamisches Array ist einfach unschön.
Hey, dann spare ich mir den Pointer-Kram
gerne.
Danke für den Tip, ich verwende jetzt
dieses Template (Danke, alcaeus )!

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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 21:01
Zitat von TheAn00bis:
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.
Schön. Aber DU liest es nicht, sondern wir. Überlass es doch uns, ob wir das schön finden, odern icht. Auch sind wir nicht in der Medizin, das nur am Rande.

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!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#7

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 21:26
Zitat von alzaimar:
Wem der Text zu breit ist, der verkleinert sein Browserfenster. DAS ist die wahre Freiheit der Typographie!
Dadurch wird der Text aber nicht kleiner zumindest nur bis zu einem gewissen Grad.


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:

 TPointerDynArray = array of Pointer;
Delphi-Quellcode:
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;
Aufruf:

position:=where(TPointerDynArray(abc), Pointer(def)); mit

abc: array of Twhatever;
und def: TWhatever.

Edit: Ein Problem gibts natürlich, wenn das Objekt nicht drin ist.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 21:38
Zitat:
Edit: Ein Problem gibts natürlich, wenn das Objekt nicht drin ist.
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;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#9

Re: Position eines Objekts im Array

  Alt 3. Apr 2006, 21:41
Um einiges eleganter.
Danke.
  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 13:22 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