Tengo un TStringList que cargo a partir de elementos seleccionados en un TListView así:
Código:
for (nItem = 0; nItem < ListView1->Items->Count; nItem ++)
{
if (!ListView1->Items->Item[nItem]->Checked)
continue;
cAux = "";
if (InputQuery(Application->Title, UpperCase(ComboBox1->Items->Strings[ComboBox1->ItemIndex]) + "\n" + ListView1->Items->Item[nItem]->Caption + "\nIndique la cantidad", cAux) && StrToIntDef(cAux, 0) > 0)
slDatos->AddObject(ListView1->Items->Item[nItem]->Caption, (TObject *)StrToInt(cAux));
}
Supongamos que una vez cargado el TStringList quedara así:
Cita:
Dato 1 - 100
Dato 2 - 200
Dato 3 - 300
Dato 4 - 400
Dato 5 - 500
|
y necesito ordenar la lista descendentemente para que queda así:
Cita:
Dato 5 - 500
Dato 4 - 400
Dato 3 - 300
Dato 2 - 200
Dato 1 - 100
|
Para ordenarla estoy usando esto:
Código:
for (int nUno = 1; nUno < slDatos->Count; ++ nUno)
for (int nDos = 0; nDos < slDatos->Count - nUno; nDos ++)
if ((int)(TObject*)slDatos->Objects[nDos] < (int)(TObject*)slDatos->Objects[nDos + 1])
{
Objeto = new TObject();
Objeto = slDatos->Objects[nDos];
slDatos->Objects[nDos] = slDatos->Objects[nDos + 1];
slDatos->Objects[nDos + 1] = Objeto;
}
Evidentemente
Objeto está declarado como
TObject *Objeto. Pero cuando termina me ha ordenado bien las cantidades pero no los literales y queda así:
Cita:
Dato 1 - 500
Dato 2 - 400
Dato 3 - 300
Dato 3 - 200
Dato 5 - 100
|
¿Qué estoy haciendo mal?