2010-04-11 8 views
16

मैं पाइथन की कुछ विशेषताओं जैसे कि टुपल्स और सेट्स सी # में उपयोग करना चाहता हूं। क्या मुझे उन्हें लागू करना चाहिए? या पहले से ही लागू कर रहे हैं? क्या कोई .NET भाषाओं के लिए गतिशील डेटा संरचनाओं की लाइब्रेरी जानता है?सी # में tuples और सेट अनुकरण कैसे करें?

उत्तर

14

.NET 3.5 में HashSet है।

.NET 4.0 में Tuple कक्षा होगी। जैसा कि लेख में उल्लेख किया गया है, .NET के पहले संस्करण में KeyValuePair < TKey, TValue> एक ट्यूपल < T1, T2> के समान है, मुख्य अंतर यह है कि KeyValuePair की आवश्यकता है कि TKey अद्वितीय है।

+0

"... जो सिर्फ एक टपल की तरह है", केवल 2 टपल यद्यपि (वैसे, वहाँ कुछ भी नहीं में और स्वयं के इस प्रकार के डेटा संरचना के बारे में विशेष रूप से 'गतिशील' है)। – Thomas

+0

@ थॉमस हां, मेरा मतलब 2-टुपल निर्दिष्ट करना था। संपादित और तय। धन्यवाद। –

+0

keyvaluepair कभी एक tuple नहीं है। कृपया इसे संपादित करें .. – nawfal

3

सेट्स के लिए, हैशसेट्स (एक .NET 3.5 सुविधा) चाल बहुत अच्छी तरह से करते हैं।

एक आंशिक जवाब है, tuples के लिए:

  • .NET 4.0 [कुछ] tuples के लिए सहायता प्रदान करता है।
  • सी # के पहले संस्करण अज्ञात प्रकार का उपयोग कर सकते हैं (मुझे लगता है कि सभी LINQ सामान के साथ, नेट 2.0, 3.0 में निश्चित रूप से पेश किया गया है)।

इनमें से कोई भी दृष्टिकोण पायथन के साथ सुविधाजनक नहीं है; मुख्य विकलांगता इस तथ्य से आती है कि सी # स्थिर रूप से टाइप किया गया है। हालांकि सी # 4.0 ट्यूपल क्लास में फैक्ट्री जैसी स्थिर विधियां हैं जो टुपल्स को आसान बनाती हैं (8-टुपल तक, यानी 8 सदस्यों के साथ टुपल्स)। उदाहरण के लिए

 
    var customer1 = Tuple.Create("John", "Smith", 14, 5.33, "202-123-444"); 

अनाम प्रकार का उपयोग करके अनुसरण किया जा सकता है। इस दृष्टिकोण के मुख्य दोष यह एक स्पष्ट रूप से "टपल" के तत्वों को नाम देने की जरूरत है कि (हालांकि यह नामकरण परोक्ष हो सकता है "अनुमान" अगर आरंभीकरण के लिए इस्तेमाल किया मानों किसी अन्य वस्तु से "अनुमान" कर रहे हैं।

 
    customer1 = new Customer { 
       Name = "John", 
       Surname = "Smith", 
       NumberOfVisits = 14, 
       CurrentBalance = 5.33, 
       PhoneNr = "202-123-444" 
    }; 
+1

@mjv: सी # एक और * स्थिर * टाइप की गई भाषा है। सी # और पायथन दोनों दृढ़ता से टाइप किए गए हैं। – quamrana

+0

@quamrana: बिल्कुल सही। मेरा मतलब यही था; अब तदनुसार संपादित किया गया। – mjv

+0

अज्ञात प्रकार सी # 3.0/.NET 3.5 में जोड़ा गया था। .NET 3.0 केवल बीसीएल सामग्री भाषाओं में कोई बदलाव नहीं था –

1
दोनों के जायके संग्रह ऐसे Set, Bag, और Ordered के रूप में यह Pair और Triple है 2 और 3 tuples के लिए, और -

आप पहले ही उल्लेख से पहले एक .नेट फ्रेमवर्क के साथ काम कर रहे हैं, Wintellect Power Collections कुछ ब्याज की साबित हो सकती है।

बेशक, 4.0 केको लागू करने से आपको रोक नहीं रहा हैस्वयं

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