5 zmiennych starych i nowych, w czym porównać najlepiej?

0

Witam moi mili.
Z serwisu jednego pobieram raz na jakiś czas np. 5 danych zawsze. Jeśli nowe dane są inne od poprzednio pobranych danych, to program o tym informuje. Żeby wam uprościć, mogę użyć

if MemoNEW.Text <> MemoOLD.Text then
//i reszta kodu

Tyle, że nie chcę tego trzymać w Memo, ani w StringList. W czym jeszcze równie prosto będzie można porównać dane 5 zmiennych nowych z 5 zmiennymi starymi? Tablica? Rekordy? Co polecacie najbardziej? Tablic raczej nie da się porównać w stylu Tablica1 <> Tablica2 więc pewnie w pętli trzeba porównywać wszystkie elementy, a tego wolałbym uniknąć. A co z rekordami, tam da radę porównać if Rekord1 <> Rekord2 then...? Czy też nie? No chyba, że macie jeszcze inne pomysły.
Tylko pytam, czego użyć najlepiej (najlepiej by bez sprawdzania elementów w pętli się obyło), nic więcej nie chce, kod sam napiszę.

0

Tablic raczej nie da się porównać w stylu Tablica1 <> Tablica2 więc pewnie w pętli trzeba porównywać wszystkie elementy, a tego wolałbym uniknąć.

Bo? To jest logiczne rozwiązanie. Zresztą są sposoby żeby porównać tablice bez pętli, ale nie będę ci mieszać w głowie...

0
-123oho napisał(a):

Zresztą są sposoby żeby porównać tablice bez pętli, ale nie będę ci mieszać w głowie...

czyli jakieś zaawansowane? Jeśli tak to w porządku, nie pisz.

A co do tematu to na razie w pętli porównuję dane z dwóch tabel dwuwymiarowych z wieloma danymi. Na razie jest w porządku. Ale temat w sumie może zostać, bo może ktoś zna inne sposoby, proste, to przyda się taka informacja. W końcu człowiek uczy się przez całe życie.

0

Tablic raczej nie da się porównać w stylu Tablica1 <> Tablica2 więc pewnie w pętli trzeba porównywać wszystkie elementy, a tego wolałbym uniknąć.

Nie ma rzeczy niemożliwych, ale zwyczajnie (czyli operatorem równości bądź nierówności) nie ma możliwości porównać ani całych macierzy, ani rekordów - możesz to wykonać sprawdzając w pętli każde pole pierwszej macierzy z odpowiednim polem z drugiej, lub w przypadku rekordów porównywać ręcznie wszystkie pola;

Jeśli wszystkie zmienne stare i nowe są jednego typu, najlepszym rozwiązaniem będzie skorzystanie z macierzy i wykonanie sprawdzania z wykorzystaniem pętli;

Innego pomysłu na razie nie mam, a gdyby nawet to się to po prostu nie opłaca przy tak prostej operacji;

0

Nie wystarczy skorzystać z CompareMem? Coś w stylu: CompareMem(@Tablica1, @Tablica2, sizeof(Tablica1)*high(Tablica1))

To jest właśnie ta bardziej zaawansowana metoda. Przy czym nie wiem czemu CompareMem, ja używam http://www.freepascal.org/docs-html/rtl/system/comparebyte.html i pochodnych Word/Dword które wykonują operację na większych porcjach. No ale jak kto lubi.

A co do tematu to na razie w pętli porównuję dane z dwóch tabel dwuwymiarowych z wieloma danymi

Gdybyś pokazał kod to byśmy widzieli więcej.

ktoś zna inne sposoby, proste, to przyda się taka informacja.

Przecież to jest proste. Co za problem zapisać tablice do dwóch tablic, i je porównać? Ja nie widzę żadnego...

0

Tak btw, to liczyłem, że Twój sposób porównywania tablic jest bardziej haxiorski, jak np.jakaś nieudokumentowana, nieznana funkcja jakiegoś procesora :D

No może bez przesady. Można używać funkcji assemblera crc32 ale działa tylko na nowych i nie ma pewności że tablice są równe. Tylko czy warto się w takie coś bawić żeby porównać tablice? CompareMem jest mocno zoptymalizowane i raczej nie ma zbyt dużo lepszych metod...
Chyba trochę przeceniasz słowo 'zaawansowane' zwłaszcza w dziale Newbi :P .

Ale żeby nie zawieść twoich oczekiwań: Polecam sprawdzić co się stanie jak http://faydoc.tripod.com/cpu/bswap.htm użyjesz na 16bitowym rejestrze. :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1