2011-08-19 7 views
5

में गैर वर्णमाला प्रकार मैं एक विशिष्ट क्रम में एक TStringList सॉर्ट करने की कोशिश कर रहा हूं।डेल्फी

ए, बी, सी के बजाय .. मैं इसे बी, सी, ए में ऑर्डर करने की कोशिश कर रहा हूं।

मैंने जिस क्रम की आवश्यकता है उसके साथ मैंने एक कॉन्स सरणी घोषित की है।

मैंने कस्टमसोर्टे के साथ प्रयास किया है, लेकिन मैं समझ नहीं पा रहा हूं कि फ़ंक्शन कैसे लिखना है।

मैं अब लूप के लिए कोशिश कर रहा हूं, लेकिन यह वास्तव में कठिन और भ्रमित हो रहा है!

मैं एक डेल्फी विशेषज्ञ नहीं हूँ ...

अग्रिम में तुम लोग धन्यवाद!

उत्तर

11

TStringListSortCompare समारोह प्रकार के बारे में मदद से:

Index1 और Index2 तुलना करने के लिए सूची में आइटम की अनुक्रमणिका कर रहे हैं। कॉलबैक रिटर्न:

  • एक मूल्य के 0 से कम स्ट्रिंग Index1 से पहचान स्ट्रिंग यदि दो तार बराबर
  • एक मूल्य के 0 से अधिक है, तो स्ट्रिंग हैं Index2
  • 0 से पहचान से पहले आता है इंडेक्स 1 के साथ इंडेक्स 1 द्वारा पहचाने जाने वाली स्ट्रिंग के बाद आता है।

तो अगर आप पहले एक के कस्टम आदेश से दूसरे मद के अपने कस्टम आदेश घटाना है, तो आइटम हल हो जाएगा की तरह आप चाहते हैं।

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

आपको धन्यवाद! तुम मुझे वह प्रकाश दे जो मुझे चाहिए! – Dirtycoder