2011-08-19 3 views
5

J'essaie de trier un TStringList dans un ordre spécifique. Au lieu de A, B, C .. J'essaie de le commander en B, C, A.Tri non alphabétique dans Delphi

J'ai déclaré un tableau const avec l'ordre dont j'ai besoin.

J'ai essayé avec CustomSorte, mais je ne peux pas comprendre comment écrire la fonction.

J'essaye avec des boucles pour maintenant, mais ça va vraiment dur et déroutant!

Je ne suis pas Delphi Expert ...

Merci les gars à l'avance!

Répondre

11

De l'aide sur le type de fonction TStringListSortCompare:

Index1 et Index2 sont des indices des éléments dans la liste à comparer. Les retours de rappel:

  • une valeur inférieure à 0 si la chaîne identifiée par Index1 vient avant la chaîne identifiée par Index2
  • 0 si les deux chaînes sont équivalentes
  • une valeur supérieure à 0 si la chaîne avec Index1 vient après la chaîne identifiée par Index2.

Donc, si vous soustrayez votre commande personnalisée du deuxième élément de l'ordre personnalisé du premier, puis les articles seront classés comme vous voulez.

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 vous! Tu me donnes la lumière dont j'ai besoin! – Dirtycoder

Questions connexes