Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit eigener Klasse und suchen in Array (https://www.delphipraxis.net/132832-probleme-mit-eigener-klasse-und-suchen-array.html)

hadschi92 20. Apr 2009 18:14


Probleme mit eigener Klasse und suchen in Array
 
Ich will überprüfen, ob ein Wert bereits in einem Array vorhanden ist, jedoch bringt der Compiler bei mir einen Fehler. Kann es sein, dass man mit "if x in array" nur Zahlen in Arrays finden kann?

Mein Code sieht so aus:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
type TPixel = record
      A: Integer;
      B: Integer;
    end;
var Aktive_Pixel: array of TPixel;
    Pixel: TPixel;
begin
  if Pixel in Aktive_Pixel then begin
    SetLength(Aktive_Pixel, Length(Aktive_Pixel)+1);
    Aktive_Pixel[High(Aktive_Pixel)] := Pixel;
  end;
end;
Ich habe wie gesagt einen Array (Aktive_Pixel) und will darin schauen ob Pixel vorkommt. Der Compiler bringt mir dann den Fehler: E2015 Operator ist auf diesen Operandentyp nicht anwendbar.

Wie kann ich sonst noch nach Pixel in dem Array suchen?

mkinzler 20. Apr 2009 18:18

Re: Probleme mit eigener Klasse und suchen in Array
 
Durch sequentielles Durchsuchen. IN ist nur für Mengen nicht für Arrays

hadschi92 20. Apr 2009 18:25

Re: Probleme mit eigener Klasse und suchen in Array
 
Also mit einer Schleife? In etwa so:

Delphi-Quellcode:
for i := 0 to High(Aktive_Pixel) do
  if Aktive_Pixel[I] = Pixel then
    Result := true
  else
    Result := false;

mkinzler 20. Apr 2009 18:29

Re: Probleme mit eigener Klasse und suchen in Array
 
Ja, statt untere Grenze 0 aber besser Low() verwenden

hadschi92 20. Apr 2009 18:39

Re: Probleme mit eigener Klasse und suchen in Array
 
Ok, Low() wird wohl das unterste Element sein.

Er will aber immer noch nicht, immer beklagt er sich, bei mir sieht das jetzt so aus:
Delphi-Quellcode:
for I := Low(Aktive_Pixel) to High(Aktive_Pixel) do
  if Aktive_Pixel[I] = Pixel then
    In_Array := true;
if not In_Array then begin
  SetLength(Aktive_Pixel, Length(Aktive_Pixel)+1);
  Aktive_Pixel[High(Aktive_Pixel)] := Pixel;
end;
Ich kann Aktive_Pixel[I] nicht mit Pixel vergleichen...
Aber Aktive_Pixel[I] kann ich einen Wert von Pixel zuweisen:
Delphi-Quellcode:
Aktive_Pixel[High(Aktive_Pixel)] := Pixel;
Irgendwie blick ich da jetzt nicht durch

jaenicke 20. Apr 2009 18:53

Re: Probleme mit eigener Klasse und suchen in Array
 
Du musst x und y einzeln vergleichen oder den Speicher direkt vergleichen.

mkinzler 20. Apr 2009 19:03

Re: Probleme mit eigener Klasse und suchen in Array
 
Oder der Klasse eine Vergleichsmethode spendieren

hadschi92 20. Apr 2009 20:50

Re: Probleme mit eigener Klasse und suchen in Array
 
Ok, ich habe jetzt Pixel.A und Pixel.B direkt verglichen, damit wäre das Problem gelöst.

Nur interessehalber, wie kann ich den Speicher direkt vergleichen und mit was ist eine "Vergleichsmethode spendieren" gemeint?

mkinzler 20. Apr 2009 20:58

Re: Probleme mit eigener Klasse und suchen in Array
 
In D2009 kann man Records mit Klassenoperatoren erweitern. In diesem Fall wäre der Operator Equal interessant.

Apollonius 20. Apr 2009 21:01

Re: Probleme mit eigener Klasse und suchen in Array
 
Delphi 2006 genügt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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