2016-11-03 7 views
10

मैं एक तरीका बनाने की कोशिश कर रहा हूं जो मेरे शब्दकोश से यादृच्छिक रूप से कार्ड का नाम लौटाता है।सी # शब्दकोश इंडेक्स द्वारा आइटम प्राप्त करें

मेरा शब्दकोश: पहला निश्चित नाम कार्ड का स्ट्रिंग और दूसरा उस कार्ड का मान है, जो int है।

public static Dictionary<string, int> _dict = new Dictionary<string, int>() 
    { 
     {"7", 7 }, 
     {"8", 8 }, 
     {"9", 9 }, 
     {"10", 10 }, 
     {"J", 1 }, 
     {"Q", 1 }, 
     {"K", 2 }, 
     {"A", 11 } 
    }; 

विधि: यादृच्छिक यादृच्छिक उत्पन्न पूर्णांक है।

public string getCard(int random) 
    { 
     return Karta._dict(random); 
    } 

तो समस्या है:

cannot convert from 'int' to 'string' 

किसी मेरी मदद कैसे मैं यह करना चाहिए सही नाम पाने के लिए?

+1

है वास्तविक कोड पोस्ट करें। यह 'वापसी Karta._dict (यादृच्छिक) को संकलित भी नहीं करता है; ' –

+0

यह कोड _dict [" K "] 2 को संकलित नहीं कर रहा है, इस प्रकार आप इसे – mybirthname

+0

@MitchWheat - true - लेकिन वह किसी कारण से चाहता है इंडेक्स द्वारा प्राप्त करें .. –

उत्तर

13

यह पूर्णांक यादृच्छिक रूप से जनरेट

public string getCard(int random) 
{ 
    return Karta._dict.FirstOrDefault(x => x.Value == random).Key; 
} 

मूल्य के लिए इसी की मुख्य वापस आ जाएगी यह यादृच्छिक रूप से उत्पन्न int इंडेक्स के अनुरूप की कुंजी लौटाएगा

public string getCard(int random) 
{ 
    return Karta._dict.ElementAt(random).Key; 
} 

साइड नोट: कि शब्दकोश के पहले तत्व कुंजी है और दूसरा मूल्य

+0

असीमित पुनरावृत्तियों के साथ भी मुझे नहीं लगता कि डुप्लिकेट मान होने पर आपको पूर्ण कवरेज मिलेगा, जिसे उन्होंने अपने उदाहरण में दिखाया था। यह शायद हमेशा "पहला" देता है (भले ही आदेश की गारंटी नहीं है .. हालांकि एक विचार हालांकि)। – Quantic

+0

धन्यवाद! ठीक वही है जो मैं खोज रहा था! मैंने ElementAt भी कोशिश की, लेकिन मैं इसका उपयोग भूल गया .Key –

+0

पहला उत्तर स्थितिगत नहीं है, दूसरा सही है (हालांकि पूरी चीज करने के अभी भी बहुत बेहतर तरीके हैं। – BradleyDotNET

2

आपकी कुंजी एक स्ट्रिंग है और आपका मान एक int है। आपका कोड काम नहीं करेगा क्योंकि यह आपके द्वारा पारित यादृच्छिक int को नहीं देख सकता है। इसके अलावा, पूर्ण कोड प्रदान करें

7

आप सूचकांक प्रति कुंजी या मान ले जा सकते हैं:

int value = _dict.Values.ElementAt(5);//ElementAt value should be <= _dict.Count - 1 
string key = _dict.Keys.ElementAt(5);//ElementAt value should be < =_dict.Count - 1 
+0

बस सिस्टम का उपयोग करके जोड़ना सुनिश्चित करें। लिंक्स; आपके प्रोग्राम में क्योंकि यह एक लिंक एक्सटेंशन विधि है। –

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