Seite 1 von 3

Listen vergleichen

Verfasst: 03.10.2005 16:12
von dietmar
Wieso kommt bei mir immer dasselbe raus? Ich habe zwei listen, in beiden stehen viele Nummern, die ich miteinander vergleichen möchte, einmal in die SchlechtListe mit der SchlechteList und einmal SchlechtList mit GutList jedesmal wenn beide Nummern gleich sind soll die Anzahl um eins erhöht werden. Bei folgendem Code

Code: Alles auswählen

ResetList(LPLSchlecht())
  While NextElement(Schlecht())
     If Schlecht()\Nummer =Gut()\Nummer
        Schlecht()\Anzahl = LPLSchlecht()\Anzahl + 1
     EndIf
  Wend
kommt immer 0 am Ende raus, wieso geht das nicht?

Verfasst: 03.10.2005 16:29
von Kaeru Gaman
du mußt für jedes element von Schlecht die komplette Gut durchlaufen,
also 2 schleifen schachteln...

Verfasst: 03.10.2005 19:30
von unix
Warum 2 schleifen

Code: Alles auswählen

MyList1()
MyList2() ;nur namen

firstelement(mylist1())
firstelement(mylist2())

for i = 1 to coutlist(mylist1())

 if Mylist1() <> Mylist2()
  messagerequester("achtung","Listen ungleich")
  break
 endif

 nextelement(mylist1())
 nextelement(mylist2())

next

Verfasst: 03.10.2005 19:39
von Kaeru Gaman
@unit-x

lies nochmal das erste posting aufmerksam.

es geht nicht darum, abzubrechen sobald auch nur ein element ungleich ist...

es geht darum, herauszufinden, wieviele elemte insgesamt gleich sind.

...jedenfalls hab ich das so verstanden... vielleicht meint er noch was anderes...

Re: Listen vergleichen

Verfasst: 03.10.2005 19:58
von freedimension
dietmar hat geschrieben:

Code: Alles auswählen

ResetList(LPLSchlecht())
  While NextElement(Schlecht())
     If Schlecht()\Nummer =Gut()\Nummer
        Schlecht()\Anzahl = LPLSchlecht()\Anzahl + 1
     EndIf
  Wend
Was ist LPLSchlecht(), hattest du nicht von nur zwei Listen (Schlecht und gut) gesprochen?
Warum wird nur für Schlecht() ein NextElement aufgerufen?
Was soll das "Schlecht()\Anzahl = LPLSchlecht()\Anzahl + 1" bringen?

Verfasst: 03.10.2005 22:19
von unix
Kaeru Gaman hat geschrieben:@unit-x

lies nochmal das erste posting aufmerksam.

es geht nicht darum, abzubrechen sobald auch nur ein element ungleich ist...

es geht darum, herauszufinden, wieviele elemte insgesamt gleich sind.

...jedenfalls hab ich das so verstanden... vielleicht meint er noch was anderes...
man kann es ja umbauen:

Statt <> : ein =
und dann hasst du das problem gelöst

oder ich verstehe euch falsch

dietmar?

Verfasst: 03.10.2005 22:41
von Kaeru Gaman
@unit-t

damit setzt du ja voraus, das die sich an der gleichen stelle befinden

du musst jedes element der 1. liste mit jedem element der 2. vergleichen,
also brauchst du 2 geschachtelte schleifen.

Verfasst: 04.10.2005 00:13
von Konne
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...

Verfasst: 04.10.2005 13:45
von walker
Hi,

die grundlegende(n) Frage(n), um überhaupt eine (treffende) Antwort zu geben, ist/sind noch gar nicht gestellt worden....

Frage 1: Sind die Listen sortiert?
Frage 2: soll der Vergleich herausfinden, ob eine Zahl in Liste 1 in Liste 2 nicht vorkommt?
Frage 3: reicht es, wenn die gleiche Listenposition ungleich ist (setzt voraus, das die Listen gleich viele Elemente enthalten...)

Wenn z.B. Liste 1 die Zahlen 1, 2, 3, 4, 5 enthällt und Liste 2 = 5, 4, 3, 2, 1 Wären ja alle Zahlen der Liste 1 in Liste 2 enthalten... aber nicht an den gleichen Positionen...

Ulf

Verfasst: 04.10.2005 14:04
von andi256
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...
oder mit CompareMemory(*MemoryID1, *MemoryID2, Länge)

Andi256