Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehere Werte auf gleichheit überprüfen (https://www.delphipraxis.net/67483-mehere-werte-auf-gleichheit-ueberpruefen.html)

MStoll 15. Apr 2006 14:50

Re: Mehere Werte auf gleichheit überprüfen
 
@Hagen:
Mit "and" bzw. "or" ist natürlich auch eine Möglichkeit ;)
Wobei man jetzt wieder darüber diskutieren könnte, was schneller ist, wenn
(Value[1] = Value[2]) false ist.

Schließlich hätte man bei ner Zuweisung ne Schreiboperation, während ein if-Konstrukt in diesem Fall nur lesen würde.

Elvis 15. Apr 2006 14:51

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Zitat von sakura
Zitat:

Zitat von marabu
if a[i] <> a[Pred(i)] then

Immer auf a[i] zuzugreifen ist nicht optimal, vorher zwischenspeichern ;)

Schon eine ganze Weile her als ich das letzte Mal im CPU Fenster deubggt hab, aber sollte ein klassischer for to loop über einen Array nicht darin resultieren, dass einfach ein Pointer auf das Element inkremeiert wird? :gruebel:

Wenn nicht:
Delphi-Quellcode:
function AllEqual(const values : array of Byte) : Boolean;
var
  firstElement,
  lastElement,
  currentElement : PByte;
begin
  if Length(values) > 1 then
  begin
    firstElement := @values[Low(values)];
    lastElement := @values[High(values)];

    currentElement := firstElement;

    while Integer(currentElement) < Integer(lastElement) do
    begin
      Inc(currentElement);

      Result := currentElement^ = firstElement^;

      if not Result then
        Exit;
    end;
  end
  else
    Result := true;
end;
Nicht schlagen, wenn's BS ist *dummer .Net Fritze ist :P *

negaH 15. Apr 2006 14:58

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Schon eine ganze Weile her als ich das letzte Mal im CPU Fenster deubggt hab, aber sollte ein klassischer for to loop über einen Array nicht darin resultieren, dass einfach ein Pointer auf das Element inkremeiert wird?
Wie kommst du zu dem Schluß ?

Heutige CPUs sind daraufhin optimiert gerade den Array-indizerten-record-basierten Zugriff auf den Speicher zu ermöglichen. Dies ist bei weitem effizienter, sowohl im Verständnis, Geschwindigkeit und Verbrauch an Speicher für den Code.

Die effizienteste Lösung dürfte darin bestehen ein Element im Array[] zu finden das NICHT identisch mit dem ersten Element des Arrays[] ist.

Auf CPU Ebene gibt es den Befehl "scanne Speicherarray auf einen Wert <> X" -> REP SCASD

Gruß Hagen

Elvis 15. Apr 2006 15:07

Re: Mehere Werte auf gleichheit überprüfen
 
hehe, bin schon ganz lieb und ruhig. Zumindest solange du nun auch einen Schnipsel rausrückst. :mrgreen:
Wer A sagt muss auch ... Code tippen. :P

xZise 15. Apr 2006 15:17

Re: Mehere Werte auf gleichheit überprüfen
 
Zitat:

Zitat von MStoll
Bei
Delphi-Quellcode:
if Value[1]=Value[2] then Result := true;
bleibt result true.
Bei
Delphi-Quellcode:
Result := Value[1] = Value[2];
wird es false.

Das ist aber auch der einzige Grund! Und bisher bin ich gut mit 2. zurecht gekommen.

Und außerdem ist es ziemlich logisch die 2. Konstruktion zu nehmen, weil if nichts anderes ist als zu überprüfen ob das zwischen if und then true ist, und dann bestimmte Dinge zu machen!
D.h. das Value[1] = Value[2] ein Bollean zurückgeben MUSS, weil ansonsten würde der Compiler meckern!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 Uhr.
Seite 3 von 3     123   

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