2011-08-19 19 views
5

Sto cercando di ordinare una TStringList in un ordine specifico.Ordinamento non alfabetico in Delphi

Invece di A, B, C .. Sto cercando di ordinarlo in B, C, A.

Ho dichiarato un array const con l'ordine di cui ho bisogno.

Ho provato con CustomSorte, ma non riesco a capire come scrivere la funzione.

Ora sto provando con i loop, ma sta diventando davvero difficile e confuso!

Io non sono un esperto di Delphi ...

Grazie ragazzi in anticipo!

risposta

11

Dalla aiuto sul tipo TStringListSortCompare funzione di:

Index1 e Index2 sono gli indici delle voci di elenco da confrontare. il callback restituisce:

  • un valore inferiore a 0 se la stringa identificata da Index1 viene prima la stringa identificata da Indice2
  • 0 se le due stringhe sono equivalenti
  • un valore maggiore di 0 se la stringa con Index1 viene dopo la stringa identificata da Index2.

Quindi, se si sottrae il vostro ordine personalizzato del secondo elemento dalla ordine personalizzato del primo, poi gli articoli saranno ordinati come si desidera.

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! Tu mi dai la luce di cui ho bisogno! – Dirtycoder

Problemi correlati