Ver Mensaje Individual
  #1  
Antiguo 04-03-2021
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Ordenar TStringList con objetos

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?
Responder Con Cita