"Top 3" aus Array ermitteln...
"Top 3" aus Array ermitteln...
Hallo zusammen....
ich stehe ein wenig auf dem Schlauch....... Anfänger halt.......
Also ... ich habe ein Array mit n Feldern :
DIM variable.s (n)
Diese habe ich mit Werten gefüllt....... zum Teil kommen Einträge (gewollt) mehrfach vor....
Nun möchte ich feststellen welcher Eintrag am häufigsten, 2häufigsten und 3häufigsten vorkommt.........
Hat jemand einen Tipp für mich ?
Danke im voraus...... Hermann
ich stehe ein wenig auf dem Schlauch....... Anfänger halt.......
Also ... ich habe ein Array mit n Feldern :
DIM variable.s (n)
Diese habe ich mit Werten gefüllt....... zum Teil kommen Einträge (gewollt) mehrfach vor....
Nun möchte ich feststellen welcher Eintrag am häufigsten, 2häufigsten und 3häufigsten vorkommt.........
Hat jemand einen Tipp für mich ?
Danke im voraus...... Hermann
Mit
SortArray(ArrayName(), Optionen [, Start, Ende])
sortieren,
und dann mit einem
For
Next
dur alle Elemente gehen.
Nun machst du eine Linked List bei der du immer ein neues Element hinzufügst wenn du was neues gefunden hast.
zB:
SortArray(ArrayName(), Optionen [, Start, Ende])
sortieren,
und dann mit einem
For
Next
dur alle Elemente gehen.
Nun machst du eine Linked List bei der du immer ein neues Element hinzufügst wenn du was neues gefunden hast.
zB:
Code: Alles auswählen
Structure Egb
Val.l
Anzahl.l
EndStructure
NewList Ergeb.Egb()
Dim Vals(100)
For t = 0 To 100
Vals(t)=Random(9)+1
Next
SortArray(Vals(), 0)
For t = 0 To 100
If OldVal<>Vals(t)
OldVal=Vals(t)
AddElement(Ergeb())
Ergeb()\Val=Vals(t)
EndIf
Ergeb()\Anzahl+1
Next
SortStructuredList(Ergeb(),1,OffsetOf(Egb\Anzahl),#PB_Sort_Long)
ForEach Ergeb()
Debug "Es gibt "+Str(Ergeb()\Anzahl)+" mal die Nummer "+Str(Ergeb()\Val)+"."
Next
Zuletzt geändert von Konne am 19.10.2006 16:48, insgesamt 1-mal geändert.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
erstmal ein dankeschön an dieser Stelle......
Also.... in den Array kommen diverse Werte ( in diesem Fall Haltestellennamen ) die ich vorher aus einer Datenbank auslese vor.... unsortiert....
Nun will ich feststellen welche 3 Haltestellen am meisten aufgeführt werden...... somit ist der NAme ( alphabetisch ) zur Ausgabe egal..... ich brauche halt nur die 3 häufigsten Werte....
Ich glaube ich muß mich wohl etwas intensiever mit Strukturen etc befassen......... lach......
Also.... in den Array kommen diverse Werte ( in diesem Fall Haltestellennamen ) die ich vorher aus einer Datenbank auslese vor.... unsortiert....
Nun will ich feststellen welche 3 Haltestellen am meisten aufgeführt werden...... somit ist der NAme ( alphabetisch ) zur Ausgabe egal..... ich brauche halt nur die 3 häufigsten Werte....
Ich glaube ich muß mich wohl etwas intensiever mit Strukturen etc befassen......... lach......
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
gut.
du kannst jetzt ein zweites array anlegen, in dem du alle namen der reihe nach aufführst.
dabei ist die ordnung egal, aber es muss jeder name genau einmal drinstehn.
ein drittes array machst du numerisch als zählarray.
jetzt gehst du deine komplette liste durch (die ursprüngliche)
bei jedem einzelnen eintrag gehst du das haltestellenverzeichnis (2.Array) durch,
und wenn der name übereinstimmt, erhöhst du der zähler im dritten array.
nachher kannst du direkt aus dem zählarray lesen, wieoft welche haltestelle vorkommt,
und den namen hast du im 2.Array an demselben index.
...das 2te und 3te Array könntest du natürlich auch in ein einziges strukturiertes packen,
wo die struktur aus einem string und einem zähler besteht.
dann kannst du das nachher noch nach zähler sortieren,
um es so in die reihenfolge der häufigkeit zu bringen.
das meinte ich mit kontrollarray, das ist imho die einfachste lösung,
wenn die menge an verschiedenen werten nicht allzu groß ist.
du kannst jetzt ein zweites array anlegen, in dem du alle namen der reihe nach aufführst.
dabei ist die ordnung egal, aber es muss jeder name genau einmal drinstehn.
ein drittes array machst du numerisch als zählarray.
jetzt gehst du deine komplette liste durch (die ursprüngliche)
bei jedem einzelnen eintrag gehst du das haltestellenverzeichnis (2.Array) durch,
und wenn der name übereinstimmt, erhöhst du der zähler im dritten array.
nachher kannst du direkt aus dem zählarray lesen, wieoft welche haltestelle vorkommt,
und den namen hast du im 2.Array an demselben index.
...das 2te und 3te Array könntest du natürlich auch in ein einziges strukturiertes packen,
wo die struktur aus einem string und einem zähler besteht.
dann kannst du das nachher noch nach zähler sortieren,
um es so in die reihenfolge der häufigkeit zu bringen.
das meinte ich mit kontrollarray, das ist imho die einfachste lösung,
wenn die menge an verschiedenen werten nicht allzu groß ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Ich bin es noch mal......
soweit habe ich es umsetzen können...... hier mal den Quellcode:
Bitte........ erschlagt mich nicht wegen unsauberer Programierung..... lächel........
Das Problem ist nun folgendes.......
bei obrigem Beispiel werden Haltestellen die gleich oft vorkommen unterschlagen....... es findet also keine reale Top 3 Auswertung statt.....
Jemand eine Idee ??
Danke im voraus
soweit habe ich es umsetzen können...... hier mal den Quellcode:
Code: Alles auswählen
; in der Variablen "zaehlertaxi" steht die Anzahl der Datensätze aus denen die Top 3 ermittelt werden soll
; in dem Arry "taxi_haltestelle(n)" jeweils ein Name der Haltestelle, dieser NAme kommt z.T. mehrfach vor
Dim liste.s(zaehlertaxi)
listenzaehler=1
For i = 1 To zaehlertaxi
ja=0
For ii = 1 To listenzaehler
If liste.s(ii) = taxi_haltestelle(i)
ja=1
EndIf
Next
If ja=0
liste.s(listenzaehler) = taxi_haltestelle(i)
listenzaehler = listenzaehler +1
EndIf
ii = ii+1
Next
listenzaehler=listenzaehler-1
Dim liste2(listenzaehler)
For i = 1 To zaehlertaxi
For ii = 1 To listenzaehler
If taxi_haltestelle(i) = liste(ii)
liste2(ii) = liste2(ii)+1
EndIf
Next
Next
; hier nun das Problem........
; es sollen die 3 häufigsten Haltestellen mit der Anzahl ermittelt werden und den Variablen top1 bis 3 sowie top1s bis 3 zugeteilt werden....
top1=0
top1s.s=" "
top2=0
top2s.s=" "
top3=0
top3s.s=" "
For i = 1 To listenzaehler
If liste2(i) > top1
top1=liste2(i)
top1s=taxi_haltestelle(i)
EndIf
Next
For i = 1 To listenzaehler
If liste2(i) > top2 And liste2(i)<top1
top2=liste2(i)
top2s=taxi_haltestelle(i)
EndIf
Next
For i = 1 To listenzaehler
If liste2(i) > top3 And liste2(i)<top2
top3=liste2(i)
top3s=taxi_haltestelle(i)
EndIf
Next
MessageRequester("test",top1s.s+" "+Str(top1))
MessageRequester("test",top2s.s+" "+Str(top2))
MessageRequester("test",top3s.s+" "+Str(top3))
Bitte........ erschlagt mich nicht wegen unsauberer Programierung..... lächel........
Das Problem ist nun folgendes.......
bei obrigem Beispiel werden Haltestellen die gleich oft vorkommen unterschlagen....... es findet also keine reale Top 3 Auswertung statt.....
Jemand eine Idee ??
Danke im voraus
Esrt mal danke für die Antwort......... wenn ich nicht wüßte das der Code funktoniert würde mir deine Antwort echt hilfreich sein............ lächel.......
Er ist ein Auszug aus dem gesamten Code......... ich glaube das ich alles relevante reingeschrieben habe ...... ich will ja auch keine fertige Lösung sondern nur einen Lösungsansatz....... und........ es geht sich heirbei um die Sortierung in die Top3........
Trotzdem Danke......... ich erkenne den guten Willen.... lächel
Er ist ein Auszug aus dem gesamten Code......... ich glaube das ich alles relevante reingeschrieben habe ...... ich will ja auch keine fertige Lösung sondern nur einen Lösungsansatz....... und........ es geht sich heirbei um die Sortierung in die Top3........
Trotzdem Danke......... ich erkenne den guten Willen.... lächel
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Hey-> pimp your Selbstvertrauen, nutze Smileys und Absätze- und schweige nicht so schüchtern mit den Punkten vor dich hin
Und nerven tust du bestimmt nicht- wir freuen uns immer über Leute, die sich mit Programmierung beschäftigen.
In dem Sinne- mach weiter so, und sry, dass ich mich gerade nicht deines Problemes annehmen kann, da Zeitmangel..
Ich wollte das nur mal gesagt haben...
Gr33tz
Tafkadasom2k5


Und nerven tust du bestimmt nicht- wir freuen uns immer über Leute, die sich mit Programmierung beschäftigen.
In dem Sinne- mach weiter so, und sry, dass ich mich gerade nicht deines Problemes annehmen kann, da Zeitmangel..
Ich wollte das nur mal gesagt haben...
Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!