zwei Integer Arrays vergleichen

Für allgemeine Fragen zur Programmierung mit PureBasic.
jogo
Beiträge: 36
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

zwei Integer Arrays vergleichen

Beitrag von jogo »

moin moin

ich erstelle zwei identische Integer-Arrays.
In einem von diesen Arrays könnten sich im Programmverlauf ein oder mehrere Werte ändern. Anzahl der Elemente bleibt konstant.
Das andere Array bleibt unberührt // dient also als Referenz.
Um zum Schluß herauszufinden, ob Werte geändert wurden, würde ich also beide Arrays Element für Element in einer Schleife vergleichen und bei der ersten Differenz abbrechen.
Bei einer Differenz wird das geänderte Array in eine Datei geschrieben, um beim nächsten Start die Daten wieder laden zu können.

Ich suche nach einer Alternative zur Vergleichs-Schleife. Die Idee ist, CompareMemory() zu nutzen:
die Adresse beider Arrays speichern: *pnt1 = array1() *pnt2 = array2()
Speichergröße: g = ArraySize(array1()) x 8 Byte
Vergleich: CompareMemory(*pn1,*pnt2, g)


Wäre das so stabil machbar?
Würde sicherlich gegenüber einer Schleife deutlich schneller sein.
Bin mir nur nicht sicher, ob das auf diese Weise gefahrlos & präzise funktioniert.
Habt ihr da Tips/Ideen/Erfahrungen?

Gruß Jörg
--
Ideen gibt es viele - man muss sie nur haben...
Mint Mate 18.3/19.3 // PureBasic 5.73
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8483
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 20.10
NVIDIA Quadro P2200
Wohnort: Saarbrücken
Kontaktdaten:

Re: zwei Integer Arrays vergleichen

Beitrag von NicTheQuick »

Ja, das funktioniert genau so.

Code: Alles auswählen

Dim a.i(100)
Dim b.i(100)

For i = 0 To 100
	a(i) = i
	b(i) = i
Next

Debug CompareMemory(@a(), @b(), ArraySize(a()) * SizeOf(Integer))

b(99) = 0

Debug CompareMemory(@a(), @b(), ArraySize(a()) * SizeOf(Integer))
Bild
jogo
Beiträge: 36
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: zwei Integer Arrays vergleichen

Beitrag von jogo »

hey Danke, funktioniert wir verrückt :-)
Damit das letzte Element (100) auch erkannt wird, muß allerdings ArraySize(a()) um 1 erhöht werden.

Code: Alles auswählen

Debug CompareMemory(@a(), @b(), (ArraySize(a()) + 1) * SizeOf(Integer))
Cool, so bau ich das ein :allright:

Gruß
--
Ideen gibt es viele - man muss sie nur haben...
Mint Mate 18.3/19.3 // PureBasic 5.73
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8483
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 20.10
NVIDIA Quadro P2200
Wohnort: Saarbrücken
Kontaktdaten:

Re: zwei Integer Arrays vergleichen

Beitrag von NicTheQuick »

Du hast Recht. Da hab ich mich vertan. Ist immer wieder eine Umstellung, dass bei Dim das letzte Element auch noch dazu gehört. Bei statischen Arrays ist das ja anders. Und in anderen Programmiersprachen auch.
Bild
Benutzeravatar
mk-soft
Beiträge: 3431
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: zwei Integer Arrays vergleichen

Beitrag von mk-soft »

Bei VBS ist es wie bei PB ;)

Code: Alles auswählen

dim text(1)

text(0) = "Hallo "
text(1) = "Welt!"
'text(2) = "Fehler"
msgbox text(0) & text(1)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
Antworten