Array sortieren
-
ajax bist du dieses kid??
-
PS:
ich hab nur listbox und array gelesen und hab daraufhin gepstet
hätt ich deinen code angeschaut, was ich jetzt gemacht habe, dann kann ich dir sagen WO der fehler liegt
CStringArray sort; // aha ein leeres objekt for (int i=0; i< sort.GetSize(); i++) // getsize von leer ist 0
PS: du musst nicht vector nehmen kannst acuh cstringarray nehmen.
geth
sort.Sort() nicht? müsstest mal MSDN schauen
PSS:
als überschrift hättest acuh
CStringArray sortieren
schreiben müssen anstatt
Array sortieren
dann hät ich nicht schnell überflogen, sorry
:xmas1: :xmas1: :xmas2: :xmas1: :xmas1:
-
In das Array wird aber vorher schon was reingeschrieben also kann das gar nicht leer sein. Ich habs mir auch schonmal mit nem Stream in eine Datei schreiben lassen. Und in der Datei stand alles drin was ich haben wollte. Hab leider vergessen, dass ich das per Hand sortieren will. Also der Benutzer soll das was in der ListBox steht nach oben oder unten schieben können mit 2 Buttons. Das in der ListBox klappt auch ohne Probleme nur werden die Einträge im Array leider nicht mit verschoben, obwohl sie das eigentlich machen müssten.
-
ich weiss jetzt ncicht warum du die daten noch in einem cstringarray brauchst, aber nun gut. ( ich glaube, die brauchst du evetl. nicht )
ein schlechter algorith. ist, das array durchzugehen und dann zu schauen das da in der box und dann zu inserten
du siehst, schon beim erklären kann man sich schwer tun
deswegen ( pseudocode! )
- leere dein array z.b. array.RemoveAll()
- gehe von i=0 bis listbox.getsize() druch
- nimm das current listbox element und mache array.Add(current_element)
eventl mit array.Add( pBox->GetSel( i ) );fertig
das verschieben klappt also gut? musst halt immer aufpassen mit dem ersten und dem letzen element.
was mit immer noch verwirrt ist das "gleichzeitig" in deinem code sortierst du nichts mit der listbox
was willste eigentlcih machen? und für was brauchst du das array?
-
Das Array hat mit der ListBox überhaupt nichts zu tun!
Das Array ist in Deinem Speicher. Die Strings in der Listbox im Speicher der Listbox.
Somit hast Du zwei getrennte Listen.Und was wolltest Du jetzt fragen?
-
Ich hab in der ListBox zusammengesetzte Strings und in den Arrays die Strings einzeln. Die ListBox soll nur zur optischen Kontrolle dienen. Mit den Arrays arbeite ich noch weiter deswegen brauch ich die. Will nämlich net den ganzen String aus der ListBox holen, ihn dann kürzen und dann erst speichern. Finde meine Lösung einfach sinnvoller auch wenn sie anderen net so vorkommt. Hängt halt von vielen programminternen Routinen und so ab die ich benutze.
Möchte das ausgewählten Elements in der ListBox haben, damit ich das Element, was an der Stelle auch im Array steht zusammen mit dem Element in der ListBox verschieben kann. Aber irgendwie klappt das nicht.
-
Jochen Kalmbach schrieb:
Das Array hat mit der ListBox überhaupt nichts zu tun!
Das Array ist in Deinem Speicher. Die Strings in der Listbox im Speicher der Listbox.
Somit hast Du zwei getrennte Listen.Und was wolltest Du jetzt fragen?
ähm wie hast du ihn verstanden?
ich hab ihn so verstanden, dass er auch 2 versch. arrays haben will
einmal den speicherplatz von der listbox und nochmal die daten in einem array ( warum auch immer, kann aber sinnvoll sein! wenn das array in einer klasse ist die nicht nur aus dem array besteht )
jetzt will er die immer gleich halten. er muss ja auch beim hoch und runtersetzen der elemente das array anpassen. und seinen "sortiercode" hab ich so verstanden, dass er die daten einfach abgleichen will
hmmm
-
Genau wie ajax das eben erklärt hat will ich das haben. Das das Array und die ListBox immer gleich sind. Mag zwar ohne Sinn erscheinen aber wie halt gesagt brauch ich das noch programmintern.
-
Desert Storm schrieb:
Ich hab in der ListBox zusammengesetzte Strings und in den Arrays die Strings einzeln.
Möchte das ausgewählten Elements in der ListBox haben, damit ich das Element, was an der Stelle auch im Array steht zusammen mit dem Element in der ListBox verschieben kann. Aber irgendwie klappt das nicht.
gibt für mich keinen sinn, sorry ist so
Mach mal ein bsp
z.b.
Listbox
A B C
D E Fund im
array
A
B
C
D
E
Fwenn du jetzt die 2te zeile selektierst ( D E F --> was ja deine ZUSAMMENGESTZTE STRINGS sein sollen und im array einzelt )
welchen wert soll er nehmen? also D oder E oder F?
-
Ich persönlich würde erst gar nicht versuchen die Listen synchron zu halten. Warum willst Du das machen?
Normalerweise brauchst doch Du die Liste erst, wenn der Benutzer es so rumgeschoben hat wie er es will. Und erst dann brauchst Du ja die Liste, oder?Somit würde ich beim Liste aufbauen einfach den Zeiger auf Deine Interne Struktur übergeben (via SetItemDataPtr).
Und am schluss einfach die liste der Reihe nach durchgehen und dann die Daten wieder in ein CStringArray stopfen...
-
Ich hab das dann mit 3 Arrays gemacht. Weil ich jedes Array in ner anderen externen Datei speichern muss. Also hab ich ein Array für A eins für B und eins für C. Das sieht denn ca. so auc
Array1:
A
DArray2:
B
EArray3:
C
Fund in der ListBox sieht das denn so aus
ListBox:
ABC
DEFund wenn die 2te Zeile ausgewählt wird un nach oben geschobn wird, sollen auch D,E,F in den 3 Arrays nach oben geschoben werden.
-
Dann mach eine Struktur:
typedef struct DatenInDerListBox { CString a; CString b; CString c; } DatenInDerListBox;
Und dieses stopfst Du jetzt beim anlegenen der ListBox via SetItemDataPtr rein und holst es am ende wieder raus und füllst damit Deine Arrays wieder...
-
Hab aber noch ein Array was nicht in der ListBox ist, sondern nebenher läuft.
Wie soll ichd das da machen??
-
Da stopfst Du die Werte halt auch in die Struktur rein, wo ist das Problem?
-
Also ich pack die Werte von dem Array was net in der ListBox is in die Struktur und wie änder ich dann die Reihenfolge der Einträge? Und ich weiß ja gar nicht, wie viele Variablen ich in der Struktur brauche.
-
hmm
dann würd ich mir ein Buch/Tutorial zu gemüte führen
Wenn du 3 arrays hast und immer in der listbox vom array[i] den wert anzeigst, dann packst du die 3 werte in das struct wie der Jochen schon meinte. Du kannst dann auch nur 3 werte speichern. und dann hast du ein array aus structs
da geht dein CStringArray ja schlecht deswegen kannst einen vector nehmen der das struct speichert
wenn du z.b. dieses hier hast
vec[0] // hier ist das struct drin mit ABC //und vec[1] // hier ist wieder ein struct drin mit DEF // und du jetzt den button hast mit pfeil nach oben, dann vertaust du das struct ( swap ) vec[0] // DEF vec[1] // ABC
genau so wolltest es ja oder?
vec[o] liefert dir aber nicht den zusammengesetzten string sondern ein struct zurück, und da musst halt die 3 teile rausnehmen.
Du kannst aber auch eine "manager" kalsse machen die 3 CStringArrays hat. und diese macht in der methode "MoveUp", bei allen 2 arrays "gleichzeitig" ein swap.
du musst das aber nicht beruflich lösen, oder?
:xmas1: :xmas1: :xmas1: :xmas2: :xmas2: :xmas1: :xmas1: :xmas1:
-
Hab jetzt nen anderen Weg gefunden. Hatte irgendwie n paar Klammern zu viel und die hab ich weggemacht und jetzt geht das auch mit den Arrays. Werd mir aber noch n Tut holen mit Vektoren und sowas alles.
Und ne das is nicht beruflich, wieso? :xmas1: :xmas2: :xmas1:
-
Desert Storm schrieb:
Und ne das is nicht beruflich, wieso?
Da Du sonst den falschen Beruf hättest