2011-08-19 10 views
5

estoy tratando de ordenar una TStringList en un orden especific.No clasificar alfabético en Delphi

En lugar de A, B, C .. Estoy tratando de ordenar que en B, C, A.

He declarated una matriz const con el fin de que necesito.

He tratado con CustomSorte, pero no puedo entender cómo escribir la función.

estoy tratando con los bucles ahora, pero va muy duro y confuso!

No soy un experto Delphi ...

Gracias chicos por adelantado!

Respuesta

11

De la ayuda sobre el tipo TStringListSortCompare función:

Índice1 y Index2 son los índices de los elementos de la lista para comparar. Los rendimientos de devolución de llamada:

  • un valor inferior a 0 si la cadena identificado por Índice1 viene antes de la cadena identificado por Index2
  • 0 si las dos cadenas son equivalentes
  • un valor mayor que 0 si la cadena con Index1 viene después de la cadena identificada por Index2.

Así que si se resta de su orden de encargo del segundo elemento de la orden de encargo de la primera, a continuación, los artículos serán ordenados como usted desee.

const 
    Order: array[0..6] of String = ('B', 'C', 'A', 'D', 'G', 'F', 'E'); 

function GetStringOrder(const S: String; CaseSensitive: Boolean): Integer; 
begin 
    for Result := 0 to Length(Order) - 1 do 
    if (CaseSensitive and (CompareStr(Order[Result], S) = 0)) or 
     (not CaseSensitive and (CompareText(Order[Result], S) = 0)) then 
     Exit; 
    Result := Length(Order); 
end; 

function MyCompareStrings(List: TStringList; Index1, Index2: Integer): Integer; 
begin 
    Result := GetStringOrder(List[Index1], List.CaseSensitive) - 
    GetStringOrder(List[Index2], List.CaseSensitive); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    List: TStringList; 
begin 
    List := TStringList.Create; 
    try 
    List.CommaText := 'A,G,a,C,B,b,F,a,B,C,c,D,d,E,D,F,G,C,A,G,d,e,f,g'; 
    List.CaseSensitive := True; 
    List.CustomSort(MyCompareStrings); 
    ListBox1.Items.Assign(List); 
    finally 
    List.Free; 
    end; 
end; 
+0

Thak you! ¡Me das la luz que necesito! – Dirtycoder

Cuestiones relacionadas