AnsiCompare richtig einsetzen
-
Hallo Leute,
ich habe folgendes Probelm,
ich habe in meinem StringGrid folgende Werte stehen.
X7.1
X7.10
X7.11
X7.12
X7.13
X7.2
X7.3
X7.4
X7.5
X7.6
X7.7
X7.8
X7.9Jetzt muss ich diese so sortieren, dass sich nach X7. nach Rehnfolge geht. So muss es aussehen.
X7.1
X7.2
X7.3
X7.4
X7.5
X7.6
X7.7
X7.8
X7.9
X7.10
X7.11
X7.12
X7.13folgender Maße bin ich bisher vorgegengen mit Buble-Prinzip.
strg_old_list->Cells[iCol][iRow].AnsiCompare (strg_old_list->Cells[iCol][iRow+1]) > 0 )Leider sortiert er mir nur so wie oben gezeigt ohne richtige Reihnfolge! Ich habe eigetlich bei AnsiCompare erwartet, dass er mir alles richtig sortiert. Da String X7.10 größer wie X7.9 unf X7.2 usw.
warum sortiert er falsch?
Habt Ihr vielleicht andere Ideen wie ich mein Problem lössen kann?
-
bool scompare(String a,String b) { return a.Length()<b.Length()||a<b; } void __fastcall TForm1::Button1Click(TObject *Sender) { vector <String> liste; liste.push_back("X7.1"); liste.push_back("X7.10"); liste.push_back("X7.12"); liste.push_back("X7.13"); liste.push_back("X7.11"); liste.push_back("X7.9"); liste.push_back("X7.8"); liste.push_back("X7.7"); liste.push_back("X7.6"); liste.push_back("X7.5"); liste.push_back("X7.4"); liste.push_back("X7.3"); liste.push_back("X7.2"); StringGrid1->RowCount = liste.size(); sort(liste.begin(),liste.end(),scompare); for(unsigned int i=0;i<liste.size();i++) { StringGrid1->Cells [0][i] = liste[i]; } }
-
swunder schrieb:
Ich habe eigetlich bei AnsiCompare erwartet, dass er mir alles richtig sortiert. Da String X7.10 größer wie X7.9 unf X7.2 usw.
Seit wann ist 1 grösser als 2 oder 9? AnsiCompare vergleicht zeichenweise von links nach rechts.
-
@Jansen
Oh dann habe ich was falsch verstanden bei AnsiCompare!@comparat
Danke, aber das ist nicht das was ich suche! Da ich machmal eine Liste von ca. 1000 Werte habe. Dann wäre diese Vorgehensweise wirklich komplex!Habt Ihr vielleicht mal Ideen wie man das sonst lösen kann?
Weil mir fällt nichts ein!
-
Hallo,
ist vielleicht ne andere Nummerierung möglich? X71A, X71B usw? Vielleicht gehts dann besser?
-
swunder schrieb:
@Jansen
Oh dann habe ich was falsch verstanden bei AnsiCompare!@comparat
Danke, aber das ist nicht das was ich suche! Da ich machmal eine Liste von ca. 1000 Werte habe. Dann wäre diese Vorgehensweise wirklich komplex!Habt Ihr vielleicht mal Ideen wie man das sonst lösen kann?
Weil mir fällt nichts ein!Na gerade wenn du eine große Liste hast, dann ist diese Lösung extrem vorteilhafter.
Und von der Performance gegenüber einer Sortierung direkt im Grid sowieso extrem besser.
Du solltest ein Grid niemals als Container zur Speicherung deiner Daten verwenden, sondern nur zweckgemäß für die Anzeige verwenden.
-
Hab trotzdem jetzt mal mit Bubble Sort die Sortierung vom Grid gemacht.
Ungetestet
for(unsigned int i=0;i<13;i++) { for(unsigned int j=i+1;j<13;j++) { String b=StringGrid1->Cells [0][i]; String a=StringGrid1->Cells [0][j]; if(a.Length()<b.Length()||a<b) { StringGrid1->Cells [0][i]=a; StringGrid1->Cells [0][j]=b; } } }