![]() |
Arrays vergleichen
1. warum geht:
Delphi-Quellcode:
aber
const a: array[0..0] = (1)
Delphi-Quellcode:
gibt eine Access Violation? Und
const a: array[0..0] = 1
Delphi-Quellcode:
geht erst gar nicht?
const a: array[0] = 1
2. kann man irgendwie
Delphi-Quellcode:
in der Art zum laufen kriegen?
const a: array[0..0] = (1); b: array[0..0] = (1);
... if a = b then... |
Hi,
versuchs mal damit:
Delphi-Quellcode:
Grüsse, Daniel :hi:
if a[0] = b[0] then Exit; //Wenn der erste Datensatz vom a-Array, gleich den ersten Datensatz vom b-Arrays ist, dann spring aus der Prozedur raus
|
Hi Nailor,
Nr. 1: Dies ist korrekte Pascal-Syntax, weil die in Klammern angegebene 1 dem ersten Item 1 zuweist (und es gibt nur ein Item). Nr. 2: Ich bin mir nicht ganz sicher, wie Arrays unter Delphi intern behandlet werden, wenn Arrays aber wie unter C++ eigentlich Pointer sind, dann verlegst du mit dieser Anweisung dein Array an die Speicherstelle 1, das führt zur Access Violation. Nr 3: Arrays in ObjectPascal müssen einen oberen und unteren Index haben- MfG, d3g |
Hi,
Konstanten-Array-Values müssen immer in Klammern stehen. Falls ich mich nicht irre. :mrgreen: Gruß Hansa |
Und zum letzten. Delphi erkennt nicht, dass Array a und Array b vom gleichen Typ sind. Du musst erst einen einheitlichen Typ deklarieren und diesen nutzen. Dann kannst Du a mit b vergleichen.
Delphi-Quellcode:
...:cat:...
type
TNullNullArray = array[0..0] of Byte; const a: TNullNullArray = (1); b: TNullNullArray = (1); |
@sakura:
Delphi-Quellcode:
--> [Error] Unit1.pas(31): Operator not applicable to this operand type
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TType = array[0..3] of byte; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a: TType = (1,2,3,4); b: TType = (1,2,3,4); implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if a = b then close; end; end. @Daniel: Das kann ich selber, aber dafür bin ich zu faul. Ich will eine einzige Abfrage, um zu wissen, ob die Dinger gleich sind.[/quote] |
:oops: Ich falle immer wieder drauf rein :oops: Aus der Delphi Hilfe
Delphi-Quellcode:
function Equal(var Source, Dest; Size: Integer): Boolean;
type TBytes = array[0..MaxInt - 1] of Byte; var N: Integer; begin N := 0; while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do Inc(N); Equal := N = Size; end; |
Zitat:
Delphi-Quellcode:
var
MyVar: Integer;
Delphi-Quellcode:
Eine Abfrage, ob alle gleich sind.
begin
for i := 0 to MaxArray -1 do begin if a[i] = b[i] then MyVar := MyVar +1; end; if MyVar = MaxArray -1 then Exit; end; Meinst Du sowas? Grüsse, Daniel :hi: |
So ähnlich hab ich das bis jetzt auch gemacht, nur hab ich mich gefragt, ob ich nicht irgendwie blöd bin, weil ich keine zwei arrays miteinander verglichen bekomme. Aber anscheinend geht das gar nicht so wie ich gedacht habe, dass es irgendwie gehen muss.
|
Es geht aber auch einfacher über CompareMem (vorrausgesetzt a und b sind vom selben Typ):
if CompareMem(@a, @b, SizeOf(a)) then ShowMessage('Sind ident'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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