शायद std::vector<T>
पर निकटतम डेल्फी एनालॉग TList<T>
है। आप एक for in
पाश के साथ सूची पर पुनरावृति कर सकते हैं:
var
Item: Integer;
List: TList<Integer>;
....
for Item in List do
Writeln(Item);
आप एक गतिशील सरणी है बल्कि एक TList<T>
से तो आप for in
उपयोग कर सकते हैं तत्वों से अधिक पुनरावृति करने के लिए है। वास्तव में, सभी निर्मित कंटेनर for in
का समर्थन करते हैं और for in
के लिए अपनी कक्षाओं में समर्थन जोड़ना आसान है।
सी ++ में for in
लूप की तरह कुछ भी नहीं है और इसलिए मुहावरे एसटीएल एल्गोरिदम का उपयोग करना है। यह आपको अज्ञात फ़ंक्शन का उपयोग करने के लिए प्रेरित करता है। डेल्फी में for in
सिंटैक्स के साथ आप अज्ञात तरीकों का उपयोग किये बिना प्राकृतिक तरीके से "कंटेनर के सभी सदस्यों पर फिर से सक्रिय" व्यक्त कर सकते हैं।
जेनेरिक डेल्फी 200 9 में डेल्फी में जोड़े गए थे और for in
लूप को डेल्फी 2005 में जोड़ा गया था, इसलिए यह सब आपके लिए XE में उपलब्ध है। इसके लायक होने के लिए, डेल्फी 200 9 में भी अज्ञात जोड़ा गया था।
आपको क्या पता होना चाहिए कि डेल्फी जेनरिक सी ++ टेम्पलेट्स से कम शक्तिशाली हैं। यद्यपि आप एक सामान्य foreach
के बारे में बात करते हैं, तो आपका कोड इस अर्थ में सामान्य नहीं है कि यह int
पर विशिष्ट है। आप सी ++ में अपने कोड का एक सामान्य संस्करण लिख सकते हैं लेकिन टेम्पलेट की तुलना में जेनरिक की अंतर्निहित सीमाओं के कारण डेल्फी जेनेरिक के साथ ऐसा करना कठिन होगा। डेल्फी में एक सामान्य तरीके से उपरोक्त कोड लिखने का प्रयास उस बिंदु पर संस्थापक होगा जहां आपने Writeln
पर कॉल करने का प्रयास किया था। जबकि यह सी ++ टेम्पलेट्स के साथ तुच्छ होगा, यह निराशाजनक रूप से जेनेरिकों तक पहुंच से बाहर है।
अद्यतन: टिप्पणियों में आप पूछते हैं कि एक कंटेनर की सामग्री को दूसरे में जोड़ने का कोई आसान तरीका है या नहीं। AddRange
विधि यह करता है। TList<T>.AddRange()
में तीन अधिभारित वेरिएंट हैं जो निम्न इनपुट पैरामीटर में से एक प्राप्त करते हैं: array of T
, Collection: IEnumerable<T>
या Collection: TEnumerable<T>
। सभी मानक जेनेरिक कंटेनर एक समान पैटर्न का पालन करते हैं।
स्रोत
2012-03-09 18:27:59
इस तरह मैंने यह किया: मैं: = 0 से n - 1 परिणाम देता हूं। जोड़ें (i); लेकिन मैं सोच रहा था कि इस तरह के सामान्य कार्य मौजूद थे :) – Mihaela
लैम्ब्डा/क्लोजर/अनोनफंक्शन सिंटैक्स इतनी बड़ी है कि डेल्फी में क्लंकी है कि यह बहुत बढ़िया है कि आपको 'लूप' के लिए इसकी आवश्यकता नहीं है। सामान्य रूप से सी ++ मुहावरे, पास्कल को अच्छी तरह से अनुवाद न करें। लेकिन सी # और डेल्फी वास्तव में बहुत करीब हैं। –
मुझे सी ++ में काफी उपयोगी लगता है। न केवल कोड क्लीनर (छोटे अज्ञात कार्यों के लिए) है, लेकिन सी ++ में यह अक्सर रेखांकित हो जाता है और तेज़ कोड उत्पन्न करता है। – Mihaela