2012-11-30 29 views
105

कोई व्यक्ति कृपया बताएं कि एक ट्यूपल क्या है और असली दुनिया परिदृश्य में इसका उपयोग कैसे करें। मैं यह जानना चाहता हूं कि यह मेरे कोडिंग अनुभव को कैसे समृद्ध कर सकता है?ट्यूपल का उपयोग कब और कब करें?

उत्तर

108

यह msdn article बहुत अच्छी तरह से यह बताते हैं उदाहरण के साथ, "एक टपल डेटा संरचना एक विशिष्ट संख्या और तत्वों के क्रम है कि"।

tuples आमतौर पर चार तरह से इस्तेमाल कर रहे हैं:

  1. डेटा का एक सेट का प्रतिनिधित्व करने के लिए। उदाहरण के लिए, एक tuple डेटाबेस रिकॉर्ड का प्रतिनिधित्व कर सकता है, और इसके घटक रिकॉर्ड के व्यक्तिगत फ़ील्ड का प्रतिनिधित्व कर सकते हैं।

  2. डेटा सेट के लिए आसान पहुंच प्रदान करने और छेड़छाड़ करने के लिए।

  3. मापदंडों (सी # में) या ByRef मानकों (विजुअल बेसिक में) बाहर का उपयोग किए बिना एक विधि से एक से अधिक मान वापस जाने के लिए।

  4. एक पैरामीटर के माध्यम से एक विधि में एकाधिक मानों को पारित करने के लिए। उदाहरण के लिए, Thread.Start(Object) विधि में एक पैरामीटर है जो आपको विधि के लिए एक मान प्रदान करने देता है कि थ्रेड स्टार्टअप समय पर निष्पादित करता है। यदि आप Tuple<T1, T2, T3> ऑब्जेक्ट को विधि तर्क के रूप में आपूर्ति करते हैं, तो आप थ्रेड के स्टार्टअप दिनचर्या को डेटा के तीन आइटमों की आपूर्ति कर सकते हैं।

68

एक टपल आप एक कस्टम वर्ग बनाए बिना एक भी वस्तु में संभवतः विभिन्न प्रकार के एक से अधिक मान गठबंधन करने के लिए अनुमति देता है। यह उपयोगी हो सकता है यदि आप एक विधि लिखना चाहते हैं जो उदाहरण के लिए तीन संबंधित मान लौटाती है लेकिन आप एक नई कक्षा नहीं बनाना चाहते हैं।

आमतौर पर आपको कक्षा बनाना चाहिए क्योंकि इससे आप प्रत्येक संपत्ति को उपयोगी नाम दे सकते हैं। कोड है कि बड़े पैमाने tuples का उपयोग करता है जल्दी से, अपठनीय हो जाएगा, क्योंकि गुण Item1 कहा जाता है Item2, Item3, आदि ..

+28

मैं इसे अधिकतम 2 मानों और प्रत्येक प्रकार के विभिन्न प्रकार i.e. स्ट्रिंग, int के लिए उपयोग करता हूं। अन्यथा यह सबसे खराब कोड बन रहा है जिसे आप लिख सकते हैं। – Ondra

+3

उपयोग सीमित रखें, शायद कक्षा/मॉड्यूल के भीतर इसे केवल निजी रूप से उपयोग करना पसंद करते हैं। इसके अलावा, जटिल प्रकार ("ग्राहक", "कर्मचारी", आदि) युक्त ट्यूपल उपयोग प्राइमेटिव्स की तुलना में थोड़ा अधिक सरल हो सकता है। बहुत सारे टुपल s के साथ काम करने की कोशिश करने से कुछ भी बुरा नहीं है। –

16

टपल कक्षाएं डेवलपर्स एक विशिष्ट उपयोग के लिए एक विशेष वर्ग को परिभाषित नहीं द्वारा 'जल्दी और आलसी' होने की अनुमति।

संपत्ति के नाम आइटम 1, आइटम 2, आइटम 3 ... हैं, जो कुछ मामलों में या दस्तावेज़ीकरण के बिना सार्थक नहीं हो सकते हैं।

ट्यूपल कक्षाओं ने दृढ़ता से सामान्य पैरामीटर टाइप किए हैं। अभी भी ट्यूपल कक्षाओं के उपयोगकर्ता जेनेरिक पैरामीटर के प्रकार से अनुमान लगा सकते हैं।

+1

तो हो सकता है कि सी # 7 को इस टुपल चीज़ की बजाय फ्लाई पर कक्षाएं/ऑब्जेक्ट्स बनाना आसान हो? –

32

एक ट्यूपल और कक्षा के बीच का अंतर यह है कि एक टुपल के पास कोई संपत्ति नाम नहीं है। यह लगभग कभी अच्छी बात नहीं है, और मैं केवल एक टुपल का उपयोग करता हूं जब तर्क एक अमूर्त गणित सूत्र जैसे समान अर्थहीन होते हैं। 5,6,7 आयामों से अमूर्त कैलकुलेशन निर्देशांक के लिए एक tuple ले सकता है।

+1

इस मामले में (जहां संभवतः मानों के प्रकार समान हैं) एक साधारण सरणी का उपयोग करना पर्याप्त नहीं है? टुपल का उपयोग करने के लिए कुछ फायदा है? –

+0

प्रकार आसानी से अलग हो सकते हैं, लेकिन मुझे लगता है कि कभी-कभी समरूप मामले में आईसीओपरपेबल कार्यान्वयन लाभ हो सकता है। जैसा कि आप कहते हैं, मैं सरल परिदृश्यों के लिए एक सरणी का उपयोग करने के इच्छुक हूं। – Kaido

+0

बहुत अच्छा जवाब! –

20

यह ट्यूपल प्रकार के बारे में जानना सबसे महत्वपूर्ण बात है। टुपल एक वर्ग है, एक संरचना नहीं। इस प्रकार प्रबंधित ढेर पर आवंटित किया जाएगा। आवंटित प्रत्येक वर्ग उदाहरण कचरा संग्रह के बोझ को जोड़ता है।

नोट: गुण आइटम 1, आइटम 2, और आगे सेटर्स नहीं हैं। आप उन्हें असाइन नहीं कर सकते हैं। एक बार मेमोरी में बनाया गया ट्यूपल अपरिवर्तनीय है।

+1

_ "बोर्डन" _ - क्या आपने कभी कचरा संग्रहण समस्या देखी है? – Gusdor

+3

बिल्कुल! नेटवर्क संचार प्रसंस्करण कोड के बारे में सोचें। यह स्मृति की बहुत सारी आवंटन और विध्वंस कर रहा है ताकि जीसी चलने में हर कुछ मिनट हो और पूरा होने में सेकंड लग सकते हैं। वास्तविक समय में उस डेटा पर कुछ डाउनस्ट्रीम निर्भर होने पर यह अस्वीकार्य है। एक और उदाहरण एक संसाधन बाधित डिवाइस है, जैसे कि मोबाइल डिवाइस, एक वास्तविक समय ऐप चला रहा है, जैसे ड्राइविंग दिशा-निर्देश ऐप। – stuckintheshuck

संबंधित मुद्दे