Egységes módon összehasonlítani tömbök

Egységes módon összehasonlítani tömböket?

Írásban unit tesztek, gyakran össze kell hasonlítani a két dinamikus tömb azonosítására. Mégis ostobán összehasonlítjuk tételesen. Lehetséges a Delphi, hogy végre valami funkciója, amely összehasonlítja a két tömb azonosítására, függetlenül attól, hogy milyen típusú elemeket tartalmaz, hogy képes legyen használni ezt a funkciót, és összehasonlítani tömbök húrok, tömbök a számok, és így tovább. D.?

Például Perl lehet összehasonlítani tömbök bármilyen típusú azonosságáról, átadva, hogy azokat, mint a paraméter egy egységes funkciót. Ezután a funkciót is megtudja, gépelési és dimenziója, és true, ha az elemek száma és azok típusát és értékét egybeesik. Lehet én is ezt a Delphi?

Előre is köszönöm a tanácsot.

Rájöttem, hogy a kérdés valójában egy kérdés a lehetőségét, hogy hasonlítson egy változó bármilyen típusú (tárgy, tömb, rekord, stb) bármilyen más változó.

ha MegaEqual (PVarA, PVarB: Pointer), majd
# XA0; ShowMessage ( "változó egyenlő");
más
# XA0; ShowMessage ( "Variable nem egyenlő");

ahol PVarA, PVarB - Mutató változó bármilyen típusú.

P. S. Ne ítélj szigorúan, ha valami baj van mutatókat dolgozott nagyon kevés.

Elvileg igen, ha minden tömb változók egymás után következnek. Aztán lehet reprezentálni két termetes bájttömböt összehasonlítani byte byte.


> Elvileg igen, ha minden tömb változók egymás után következnek.
> # XA0; akkor úgy reprezentálható, mint két tagbaszakadt tömb
> Byte és a byte össze.
>

És hogyan lehet tenni? Meg tudja mutatni egy kis példa?

Xor az a tömb mérete?

Xs. Ez most csak írtam. Én nem teszteltük, de elvileg működnie kell. Len - a hossza a nagyobb tömbök. Található keresztül hossza (tömb). Keresztül Poynter nem értem. A igen - ha az egyik tömbök rövidebb Len, akkor vagy ott AV, vagy folytatása a tömb lesz véletlenszerűen a memóriából.

eljárás TForm1.Button1Click (Sender: TObject);

Sompare funkció (a, b: pointer; sizeOfElement: byte): Boole;
var La, Lb, j: integer;
# XA0; # XA0; CA, CB: Pchar;
kezdődik
eredmény: = false;
ha (a = nulla), vagy (b = nulla), majd kilép;
La: = PInteger (Egész szám (a) -4) ^ * sizeOfElement;
Lb: = PInteger (Egész szám (b) -4) ^ * sizeOfElement;
ha a La<>Lb majd kilép;
Ca: = Pchar (a);
Cb: = Pchar (b);
Eredmény: = CompareMem (a, b, La)
végén;

var x, y: tömb byte;
i: integer;
kezdődik
SetLength (x, 3);
i: = alacsony (x) Magas (x) nem # XA0; x [i]: = (i + 1);
SetLength (y, 3);
i: = alacsony (y) Magas (y) do # XA0; Y [i]: = (i + 1);
// y [2]: = 5;

ha összehasonlítani (x, y, sizeof (x [666])), majd
felirat: = "Egyenlő" mást Caption: = "nem egyenlő";
végén;
összehasonlítani - összehasonlítja a két dinamikus tömb (sor lehetséges, és ha igen, hogy okozhat összehasonlítani (@ s1 [1], @ s2 [1], 1)) a tömb kell lennie az azonos típusú. Ha a tömb elemei - utalás a tárgyak (vonósok, osztályok), ez természetes nem működik.

-d FFF2: 93F1
FFF2: 93F0 # XA0; # XA0; BF 5C 00 8A 1C F3 A4-33 C0 AB AB 59 5E 1F 1E # XA0; # XA0 ;. \. 3. Y ^ ..
FFF2: 9400 # XA0; 56 C5 74 0A 8A 3C F3 A4-AB AB 5E 1F C5 74 02 80 # XA0; V.t ..<. ^..t..
FFF2: 9410 # XA0; C9 80 8B F9 F3 A4 FE C9-8A C7 32 FF E8 A7 0C 73 # XA0;. 2. s
FFF2: 9420 # XA0; 02 8A F9 8A C3 32 DB E8-9C 0C 73 02 8A D9 E8 36 # XA0;. 2. s. 6
FFF2: 9430 # XA0; A4 66 FF 74 12 66 FF 74-12 66 26 8F 06 00 33 0A # XA0; .f.t.f.t.f. 3
FFF2: 9440 # XA0; C0 8E D8 66 8F 06 88 00-36 C7 06 2C 03 80 00 36 # XA0;. f. 6. 6
FFF2: 9450 # XA0; 8E 1E március 30. 36 8C 1E 2E-F6 03 46 FB 01 74 27 36 # XA0;. 0.6. F..t „6
FFF2: 9460 # XA0; C5 36 BF 0E C4 7E FC 26-8C 5D 4E 4E 10 89 1C 26 # XA0; 0,6.

.]. NN ..
FFF2: 9470 # XA0; 89 # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0;.

> Eredmény: = CompareMem (a, b, Len);

Hmm. És itt van a megoldás! Oké, tegyük fel, hogy én egyszerűen az elvet.

Nem, mert nincs olyan módszer, hogy erősítse meg, hogy a mutató a hasonló felépítésű.

Köszönöm szépen a tanácsot. Próbáltam az alábbi kódot:


var
# XA0; PA, PB: Pointer;
# XA0; A, B: tömb string;
kezdődik
# XA0; SetLength (A, 2);
# XA0; A [0] = "1";
# XA0; A [1] = "2";
# XA0; SetLength (B, 2);
# XA0; B [0] = "1";
# XA0; B [1] = "2";

# XA0; PA: = Pointer (A);
# XA0; PB: = Pointer (B);

# XA0, ha CompareMem (PA, PB, hossz (A)), majd
# XA0; # XA0; ShowMessage ( "Egyenlő")
# XA0; máshol
# XA0; # XA0; ShowMessage ( "nem");

Array Egész dolgozik tömbök húrok - nincs.


> Vagy a rejtett kérdésre, hogy „miért nem működik a húrok”?

) Igen, ez egy rejtett kérdés. Sajnálom, nem figyelni a „vonal”.

Általában azt az általános következtetést, valószínűleg abban rejlik, hogy ez könnyebb megtenni egy elemenkénti összehasonlítás és Delphi nem teszi lehetővé a „vas”, hogy összehasonlítsa a változók ismeretlen típusú. Eh.