2012-10-09 17 views
6

क्या डेल्फी 2007 में कोई एकीकृत समाधान है यह जांचने के लिए कि क्या TStringList में एक निश्चित मूल्य का हिस्सा है?डेल्फी: TStringList.Contains?

उदा .:

List.AddObject('This is a string', customStringObject1); 
List.AddObject('This is a mushroom', customStringObject2); 
List.AddObject('Random stuff', customStringObject3); 

के लिए सर्च कर रहे हैं "यह एक है" मुझे, "सही" वितरित करने के लिए के बाद से पहली दो तत्व इस partwise शामिल माना जाता है।

एकमात्र तरीका मैं अब तक के बारे में पता कर रहा हूँ TStringList.find(string,integer) है, लेकिन इस एक पूरी स्ट्रिंग तुलना करें, अर्थात केवल इस के लिए खोज करता है एक स्ट्रिंग सच वापस आ जाएगी है।

कोई सुझाव?

उत्तर

10

एकीकृत नहीं है, लेकिन आप पाठ संपत्ति पर स्थिति फ़ंक्शन का उपयोग कर सकते हैं:

Pos('This is a', List.Text) 

और आप इसे एकीकृत किया जा करना चाहते हैं, आप TStrings के लिए एक वर्ग के सहायक बना सकते हैं।

5

सीधे नहीं, नहीं। आपको या तो:

1) Text संपत्ति पर Pos() पर कॉल करें, जो आपके पास बहुत सारे तार हैं तो कुशल नहीं है।

2) प्रत्येक String पर Pos() पर मैन्युअल रूप से सूची के माध्यम से लूप करें। अधिक कुशल, लेकिन अधिक कोडिंग।

3) TStringList से एक नया वर्ग निकाले जाते हैं और तार तुलना करने के लिए लेकिन आप चाहते हैं (डिफ़ॉल्ट कार्यान्वयन सरल कॉल AnsiCompareStr() या AnsiCompareText(), CaseSensitive संपत्ति के आधार पर) अपने आभासी CompareStrings() विधि ओवरराइड। यदि आपको कोई मिलान मिलता है तो 0 वापसी करें। इसके बाद आप TStringList.Find() विधि का उपयोग कर सकते हैं, जो CompareStrings() आंतरिक रूप से कॉल करता है (सावधान रहें, इसलिए TStringList.Sort() करता है, लेकिन यदि आप TStringList.CustomSort() इसके बजाय कॉल करते हैं तो आप इससे बच सकते हैं)।