2011-07-15 17 views
5

मैं एक सी # शब्दकोश का उपयोग कर रहा हूं।सी # शब्दकोश एकाधिक मानों के साथ

Dictionary<int, string> d = new Dictionary<int, string>(); 

मैं शब्दकोश का उपयोग कर रहा हूं, तब तक मेरा मुख्य मूल्य अद्वितीय हो सकता है और शब्दकोश द्वारा लागू किया जा सकता है।

मुख्य मूल्य int होगा। इससे पहले कि मुझे केवल एक मूल्य की आवश्यकता थी। अब चीजें विस्तारित हुई हैं जहां मुझे एक ही कुंजी के लिए कई मान (विभिन्न डेटा प्रकारों के साथ) स्टोर करने की आवश्यकता है।

कुछ इस तरह - (हालांकि यह काम नहीं करेगा):

Dictionary<int,string,string,bool, bool,int,bool> d = new Dictionary<int, string,string,bool, bool,int,bool>(); 

ध्यान दें कि स्ट्रिंग, स्ट्रिंग, bool, bool, int, bool अतिरिक्त मान मैं कुंजी क्षेत्र है जो हो जाएगा के लिए संग्रहीत करना चाहते हैं एक int

मुझे यकीन नहीं है कि मैं ऐसा करने के बारे में कैसे जाऊंगा। मैं अलग-अलग डेटा प्रकारों के साथ एकाधिक मानों को स्टोर करने के लिए एक महत्वपूर्ण मान कैसे प्राप्त कर सकता हूं। जिस तरह से मैं देखता हूं कि यह संभव हो सकता है कि अतिरिक्त फ़ील्ड को एक सूची में स्टोर करना है, लेकिन यह सुनिश्चित न करें कि यह सब कैसे हो जाएगा। अगर कोई प्रदान कर सकता है और उदाहरण की सराहना की जाएगी।

अग्रिम धन्यवाद।

उत्तर

11

आप मूल्य के लिए सामान्य प्रकार के रूप में Tuple का उपयोग कर सकते हैं। संभावना है कि इस बातें मॉडल करने के लिए एक बेहतर तरीका हो सकता है -

var d = new Dictionary<int,Tuple<string,string,bool, bool,int,bool>>(); 

वैकल्पिक रूप से, एक प्रकार (वर्ग या struct) है कि एक समूह के रूप विभिन्न प्रकार धारण पैदा करते हैं।

+0

+1 बस क्योंकि यह सेक्सी है और मैंने इसे पहले कभी नहीं देखा है। –

+8

मैं tuple का उपयोग करने के खिलाफ सावधानी बरतता हूं, क्योंकि जब आप मजबूत टाइपिंग प्राप्त करते हैं, तो आपके पास मूल्यों का मतलब नहीं है। * इस मामले में, मैं मुख्य उत्तर होने के विकल्प के रूप में encapsulating कक्षा सुझाव को बढ़ा दूंगा , जैसा कि @ स्पेंडर ने किया है। –

+0

मैं @ एंथनीपेग्राम से सहमत हूं, कृपया एक टुपल का उपयोग न करें। आईएमओ टुपल्स डेवलपर के हिस्से पर सिर्फ आलस्य हैं। कक्षाएं टाइपएफ़ और संदर्भ स्पष्ट हैं। – Neil

15

string, string, bool, bool, int, bool वाले फ़ील्ड के साथ एक कस्टम डेटा प्रकार बनाएं और इसे अपने शब्दकोश मान के रूप में उपयोग करें।

class MyType 
{ 
    public string SomeVal1{ get; set; } 
    public string SomeVal2{ get; set; } 
    public bool SomeVal3{ get; set; } 
    public bool SomeVal4{ get; set; } 
    public int SomeVal5{ get; set; } 
    public bool SomeVal6{ get; set; } 
} 

तो

var someDictionary = new Dictionary<int, MyType>(); 

और

someDictionary.Add(1, 
        new MyType{ 
         SomeVal1 = "foo", 
         SomeVal2 = "bar", 
         SomeVal3 = true, 
         SomeVal4 = false, 
         SomeVal5 = 42, 
         SomeVal6 = true 
        }); 
0

केवल लगता है कि सब क्या गीक्स यहाँ मैं जोड़ सकते हैं ने कहा है, मुझे लगता है कि आपको चाहिए Encapsulate कि कुछ वर्ग में डिक्शनरी में, इसलिए उस डिक्शनरी रैपर का उपयोगकर्ता कभी भी पता नहीं लगाएगा कि हुड के नीचे क्या हो रहा है, और लागू करें उस कक्षा के अंदर आपके पसंदीदा रिकवरी तर्क, या यहां सूचीबद्ध एक।

+0

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

0

शब्दकोश key/value जोड़ रहे हैं। जहां एक कुंजी एक मूल्य से मेल खाती है। मूल्य हालांकि कोई वस्तु हो सकता है, क्योंकि आप आसानी से उस ऑब्जेक्ट को बना सकते हैं जिसमें आपके इच्छित सभी सदस्य शामिल हैं। निम्नलिखित पर विचार करें:

var d = new Dictionary<int, string, string, bool, bool, int, bool>(); 

इस शब्दकोश के उपभोक्ता पता नहीं क्या इन आदिम प्रकार डेटा का प्रतिनिधित्व करने का इरादा है होगा।

public class Person : IPerson 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public bool IsMarried { get; set; } 
    public bool HasChildren { get; set; }   
    public bool IsHappy { get; set; } 

    public Person(int id) 
    { 
     Id = id; 
    } 
} 

जाहिर है इस वस्तु पूरी तरह प्रकार से मेल खाते और एक कंटेनर में डेटा प्रतिनिधित्व करने के उद्देश्य से बना है: आप एक वस्तु बनाना चाहिए।इस समझ के साथ आप निम्न कार्य कर सकते हैं:

var d = new Dictionary<int, IPerson>(); 
संबंधित मुद्दे