Listen vergleichen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

andi256 hat geschrieben:oder mit CompareMemory(*MemoryID1, *MemoryID2, Länge)
Das wird bei Linked Lists nicht funktionieren, da die Elemente in der Regel verstreut im Speicher und nicht nacheinander liegen.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Konne hat geschrieben:Also wenn ein Fehler gemeldet werden soll wenn die Listen net gleich sind würde ich das spaßeshalber mit MD5 Hashs oder so machen...
Spaßeshalber kannst du das ja gerne machen, stellt sich mir nur noch die Frage was es bringen soll :)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag von dietmar »

Nein die Zahlen sind nicht geordnet. Wenn in der einen Liste die Zahlen 123456 sind und in der anderen die Zahlen 233357, möcht ich zum einen Wissen welche Zahlen fehlen, und welche Zahlen wie oft doppelt vorhanden sind was ich dann gerne in der einen Liste speichern möchte. Das mir in für die eine Liste ein NextElement vorhanden ist, liegt daran das mir das mit dem verschachteln im Prinzip klar ist, die Frage ist nur wie.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@dietmar

mal pseudecode, geht schneller:

Code: Alles auswählen

resetlist schlecht
while nextelement schlecht
    resetlist gut
    while nextelement gut
        if schlecht = gut
            count+1
        endif
    wend
wend
...so ungefähr halt... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Ist in diesem Fall ForEach - Next nicht besser als While - Wend?
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

vonTurnundTaxis hat geschrieben:Ist in diesem Fall ForEach - Next nicht besser als While - Wend?
...oder so... kommt aber doch ziemlich aufs gleiche raus, oder?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag von dietmar »

Ja so in die richtung dacht ich mir das auch.

Code: Alles auswählen

ResetList(Schlecht())
While NextElement(Schlecht())
    ResetList(Gut())
     While NextElement(Gut())
         If LPLSchlecht()\Nummer = LPLGut()\Nummer
            LPLSchlecht()\Anzahl = Schlecht()\Anzahl + 1
         EndIf
    Wend
Wend
nur dass dies nicht den gewünschten Erfolg bringt. Die Lösung ist bestimmt wieder so einfach.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

dietmar.. was ist denn dieses LPL?


ohne deine listen zu kennen...
du musst natürlich elemente der listen vergleichen, die du in der schleife durchgehst...

Code: Alles auswählen

ResetList(Schlecht()) 
While NextElement(Schlecht()) 
    ResetList(Gut()) 
    While NextElement(Gut()) 
        If Schlecht()\Nummer = Gut()\Nummer 
            Zähler + 1 
        EndIf 
    Wend 
Wend 
LPLGut() ist eine ganz andere Liste als Gut()

...welche namen hast du denn im NewList-command ?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

dietmar hat geschrieben:

Code: Alles auswählen

ResetList(Schlecht())
While NextElement(Schlecht())
    ResetList(Gut())
     While NextElement(Gut())
         If LPLSchlecht()\Nummer = LPLGut()\Nummer
            LPLSchlecht()\Anzahl = Schlecht()\Anzahl + 1
         EndIf
    Wend
Wend
Da ist es wieder, nun sogar mit einer Linked List mehr :)
Du hast bisher die LLs Schlecht, Gut, LPLSchlecht und LPLGut und springst bzw. vergleichst wild hin und her ohne ersichtlichen Sinn. Die Positionszeiger in LPLSchlecht und LPLGut werden dabei nicht einmal verändert, befinden sich also stets auf dem zuletzt hinzugefügten Element (angenommen das davor nicht doch irgendwo ein ResetList aufgerufen wurde).

So wird meiner Ansicht nach ein Schuh draus:

Code: Alles auswählen

ResetList(Schlecht())
While NextElement(Schlecht())
    ResetList(Gut())
     While NextElement(Gut())
         If Schlecht()\Nummer = Gut()\Nummer
            Schlecht()\Anzahl = Schlecht()\Anzahl + 1
         EndIf
    Wend
Wend
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@FD

siehe mein posting...

nur daß ich keinen sinn drin sehe, einen anzahl-counter innerhalb einer der listen zu erhöhen...

außer natürlich, es soll gezählt werden, wie oft das element der ersten in der zweiten vorkommt...
dann müßte es aber gesichert sein, daß es in der ersten genau einmal vorkommt, und das scheint mir nicht gegeben...

deshalb hab ich nen unabhängigen gewählt...

[edit]
achso.. doch.. hab nochmal in dietmars post geschaut...

ok, dann is FDs lösung passend...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten