Seite 1 von 2
Liste analysieren? (mir fällt kein besserer Topic ein)
Verfasst: 26.10.2004 13:30
von pvmichael
Hallo!
ich habe folgendes Problem:
Es existiert eine Liste, darin ist z.b. folgendes enthalten: (| ist Trennsymbol)
A|1|80
B|2|21
Ab|1|79
C|5|8080
D|99|22
Ac|1|23
*Puh, ich hab jetzt ne viertelstunde versucht, zu beschreiben was ich will und komme zu keinem verständlichen Ergebnis*
Am Ende soll 4 raus kommen, weil 1,2,5 und 99 je mindestens einmal vorgekommen sind (Diese Zahlen werden variieren!). Die doppelten 1er sollen ignoriert werden.
Hat jemand einen Rat für mich?
Grüsse
pvmichael
Verfasst: 26.10.2004 13:42
von freedimension
Versteh Dein Problem nicht:
Code: Alles auswählen
Procedure analyzeThis()
ProcedureReturn 4
EndProcedure
Versuch nochmal dein Problem zu umschreiben.
Verfasst: 26.10.2004 13:47
von pvmichael
ok, ich versuchs nochmal...
ich hab eine Liste:
A|1|80
B|2|21
Ab|1|79
C|5|8080
D|99|22
Ac|1|23
Ich möchte nachdem Analysieren der Liste wissen, wieviele Einträge darin vorgekommen sind. Dabei sollen aber Einträge welche nach Spalte 2 identisch sind nur einmal gezählt werden. Bei obigem Beispiel wären das 4 Einträge.
Ich hatte jetzt die Idee, einfach von der gesamtanzahl die Anzahl der Einträge (-1) abzuziehen, um dann auf die Anzahl der übrigen zu kommen, aber das geht irgendwie nicht, weil in meiner Schleife sich der Eintrag auch selbst prüft laber laber laber...
jetzt verstanden?
Verfasst: 26.10.2004 13:52
von glubschi90
Ich glaub' ich hab's verstanden... (Ups! pvmichael war schneller)
Weiß leider selber nich', wie man das beschreiben könnte...
Wenn ich das richtig verstanden habe, hat man so zu sagen eine Variable a (So müsste ich's hinkriegen...)
Jedesmal wenn im zweiten Teil eines Eintrags (Mitte) eine bis jetzt noch nicht aufgetauchte Zahl vorkommt, bekommt unsere Variable a +1
(Hoffe, das ist verständlich uind richtig)
So hätte unsere Variable a dann am Ende der Liste den Wert 4
EDIT
pvmichael hat geschrieben:Ich hatte jetzt die Idee, einfach von der gesamtanzahl die Anzahl der Einträge (-1) abzuziehen, um dann auf die Anzahl der übrigen zu kommen, aber das geht irgendwie nicht, weil in meiner Schleife sich der Eintrag auch selbst prüft laber laber laber...
Ok, jetzt rauch mein Kopf...

Verfasst: 26.10.2004 13:55
von freedimension
Ich denke ich hab's jetzt verstanden
Also, wie groß können die Zahlen der zweiten Spalte denn werden? Bis zu einer gewissen Größe könntest du ein Array erzeugen in welchem du dann ablegst ob eine Zahl schonmal vorgekommen ist. Bis zu einer gewissen Arraygröße dürfte dass auch deutlich schneller gehen, da der Aufwand nur noch n ist und nicht mehr nxn beim Checken jedes Eintrages gegen einen anderen.
Verfasst: 26.10.2004 13:55
von pvmichael
glubschi90 hat geschrieben:Ich glaub' ich hab's verstanden...
Ja, ich denke, wir meinen beide das gleiche

Verfasst: 26.10.2004 13:57
von pvmichael
freedimension hat geschrieben:Ich denke ich hab's jetzt verstanden
Also, wie groß können die Zahlen der zweiten Spalte denn werden? Bis zu einer gewissen Größe könntest du ein Array erzeugen in welchem du dann ablegst ob eine Zahl schonmal vorgekommen ist. Bis zu einer gewissen Arraygröße dürfte dass auch deutlich schneller gehen, da der Aufwand nur noch n ist und nicht mehr nxn beim Checken jedes Eintrages gegen einen anderen.
Die Zahlen der zweiten Spalte sind Strings

, hatte es nur der Einfachheit als Zahlen deklariert.
Verfasst: 26.10.2004 14:01
von glubschi90
freedimension hat geschrieben:Bis zu einer gewissen Größe könntest du ein Array erzeugen in welchem du dann ablegst ob eine Zahl schonmal vorgekommen ist. Bis zu einer gewissen Arraygröße dürfte dass auch deutlich schneller gehen, da der Aufwand nur noch n ist und nicht mehr nxn beim Checken jedes Eintrages gegen einen anderen.
Sowas in der Art hab' ich mir auch schon überlegt...
Dachte dann aber, das das zu unelegant (

) sei.
Aber ist wirklich am besten
PS:
Man könnte es doch auch mit LinkedLists (statt 'nem Dim-Feld) machen.
War da nicht sowas, dass das zugreifen auf die Lists seit PB. V.3.92 schneller geht???
EDIT
(Man, war schon wieder zu langsam

)
@pvmichael
Das macht doch eigentlich keine Unterschied oder
man kann doch genauso vergleichen...
Verfasst: 26.10.2004 14:01
von freedimension
Handelt es sich um eine richtige Liste mit Elementen?
- Dann könntest du ein weiteres Feld einfügen in welchem du ablegst ob der Artikel schon gezählt wurde oder nicht.
- Beim Gegenchecken der Elemente dann einfach überprüfen ob die "beiden" Kandidaten identisch sind (also es sich um das gleiche Element handelt). Am Einfachsten über die Adresse überprüfbar.
- Nur hochzählen wenn kein
anderes Element (siehe Punkt 2) mit identischem String den Eintrag in diesem neuen Feld hat.
Achja, bei SQL gäbe es da die Befehl DISTINCT und COUNT

Verfasst: 26.10.2004 14:04
von pvmichael
freedimension hat geschrieben:Handelt es sich um eine richtige Liste mit Elementen?
Es handelt sich um ein ListIconGadget.
Aber das mit der LinkedList wäre vielleicht eine Möglichkeit, ich versuche mal, ob ich da was zustande bringe.