Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wert im Array finden? (https://www.delphipraxis.net/74918-wert-im-array-finden.html)

Schucki 10. Aug 2006 20:39


Wert im Array finden?
 
Hi,

also ich hab schon einiges gemacht nur das bekomme ich nicht gebacken...
Ich möchte wissen ob ein Wert in dem Array[1..12] of Byte vorhanden ist.

Ich mach das im Moment so...

if (bytW=RX_GSA.aryOn[1])
or (bytW=RX_GSA.aryOn[2])
or (bytW=RX_GSA.aryOn[3])
or (bytW=RX_GSA.aryOn[4])
or (bytW=RX_GSA.aryOn[5])
or (bytW=RX_GSA.aryOn[6])
or (bytW=RX_GSA.aryOn[7])
or (bytW=RX_GSA.aryOn[8])
or (bytW=RX_GSA.aryOn[9])
or (bytW=RX_GSA.aryOn[10])
or (bytW=RX_GSA.aryOn[11])
or (bytW=RX_GSA.aryOn[12])
then beep;

Das funktioniert zwar aber das läst mir keine Ruhe, es geht bestimmt auch anders, also einfacher...
Nur wie? :?

Dachte mit

if bytW in RX_GSA.aryOn then beep;

nur das geht nicht...

Für jeden Tip dankbar, Frank

fwsp 10. Aug 2006 20:40

Re: Wert im Array finden?
 
Delphi-Quellcode:
if bytW in [RX_GSA.aryOn[1], RX_GSA.aryOn[2], RX_GSA.aryOn[3], ...] then
Delphi-Quellcode:
  for i := 0 to high(RX_GSA.aryOn) do
  begin
   if (bytW = RX_GSA.aryOn[i]) then
   ...
  end;

Jürgen Thomas 11. Aug 2006 07:21

Re: Wert im Array finden?
 
Delphi-Quellcode:
function ByteArray_Contains( const arr: Array of Byte; const c: byte ): Boolean;
var i0: integer;
begin
  Result := false;
  i0 := Low(arr) - 1;
  while ( (not Result) and (i0 < High(arr)) )
  do begin
    Inc(i0);
    //  if (arr[i0] = c)
    //  then Result := true;
    //  [/edit] verkürzt wie folgt; das ist unproblematisch,
    //  weil nach positivem Result die Schleife beendet wird
    Result := arr[i0] = c;
  end;
end;
Ein Blick in die Delphi-Quelltexte (ab Pro mitgeliefert) zeigt, dass auch IndexOf-Funktionen meistens nichts anderes machen, als ein Array in einer Schleife zu durchlaufen.

Bitte nicht sauer sein: Ich arbeite zz. fast nur in C#; deshalb habe ich oben vielleicht eine Delphi-Schreibweise nicht korrekt eingetragen.

Vielleicht hilft's. Jürgen

Klaus01 11. Aug 2006 07:44

Re: Wert im Array finden?
 
... einen hab' ich noch!

Aufbauend auf den Vorschlag vom Jürgen:

Delphi-Quellcode:
function ByteArray_Contains( const arr: Array of Byte; const c: byte ): Boolean;
var
  i0: integer;
begin
  i0 := Low(arr);
  while (iO <=High(arr)) and (arr[iO] <> c) do
    inc(iO);
  Result := (iO <= High(arr));
end;
Grüße,
Klaus

Thanatos81 11. Aug 2006 07:57

Re: Wert im Array finden?
 
Öhm, Klaus? Da du am Anfang auf iO den Wert low(arr) zuweist und nur bis max. high(arr) inkrementierst wird (iO <= High(arr)) immer true ergeben, oder hab ich gerade ein Brett vorm Kopf?

Klaus01 11. Aug 2006 08:06

Re: Wert im Array finden?
 
@Thanatos81

wenn High(arr) erreicht ist, wird iO nochmals um 1 erhöht.
Und damit kann ich dann eine Aussage treffen ob der Wert im Array vorhanden
ist oder nicht.
Ist iO im Bereich von Low(arr) und einschließlich High(arr)
dann ist ein Wert gefunden worden.
Wurde High(arr) überschritten ist der Wert im Array nicht gefunden worden.

Grüße
Klaus

Thanatos81 11. Aug 2006 09:48

Re: Wert im Array finden?
 
Jupp, da war ein Brett... Danke fürs Entfernen :D


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