कुंजी द्वारा शब्दकोश मूल्य प्राप्त करें


183

मैं फ़ंक्शन पर कुंजी द्वारा शब्दकोश मूल्य कैसे प्राप्त कर सकता हूं

मेरा फ़ंक्शन कोड यह है (और कमांड जो मैं कोशिश करता हूं लेकिन काम नहीं करता है):

static void XML_Array(Dictionary<string, string> Data_Array)
{
    String xmlfile = Data_Array.TryGetValue("XML_File", out value);
}

मेरा बटन कोड यह है

private void button2_Click(object sender, EventArgs e)
{
    Dictionary<string, string> Data_Array = new Dictionary<string, string>();
    Data_Array.Add("XML_File", "Settings.xml");

    XML_Array(Data_Array);
}

मैं कुछ इस तरह से चाहता हूं: स्ट्रिंग xmlfile = Settings.xml होने के लिए फ़ंक्शन
परXML_Array

जवाबों:


249

यह इस तरह सरल है:

String xmlfile = Data_Array["XML_File"];

ध्यान दें कि यदि शब्दकोश में एक कुंजी नहीं है जो बराबर है "XML_File", तो वह कोड एक अपवाद फेंक देगा। यदि आप पहले जांच करना चाहते हैं, तो आप इस तरह की कोशिश कर सकते हैं:

string xmlfile;
if (!Data_Array.TryGetValue("XML_File", out xmlfile)) {
   // the key isn't in the dictionary.
   return; // or whatever you want to do
}
// xmlfile is now equal to the value

73

शब्दकोश में केवल मुख्य नाम का उपयोग क्यों नहीं किया गया है, C # में यह है:

 Dictionary<string, string> dict = new Dictionary<string, string>();
 dict.Add("UserID", "test");
 string userIDFromDictionaryByKey = dict["UserID"];

यदि आप टिप सुझाव को देखते हैं:

यहां छवि विवरण दर्ज करें


4
यदि कुंजी मौजूद नहीं है, तो यह एक अपवाद फेंकता है। यही कारण है कि अन्य लोगों के उत्तरों से पता चलता है कि आपको TryGetValue का उपयोग करना चाहिए।
लादिस्लाव ओन्डिस

मुझे नहीं लगता कि यही कारण है।
FrenkyB

1
आपका क्या अर्थ है?
लादिस्लाव ऑन्ड्रिस

1
मुझे नहीं लगता कि यही कारण है कि अन्य लोग TryGetValue का सुझाव दे रहे हैं। मेरा समाधान सरलीकरण है, जिसके बारे में मुझे जानकारी नहीं थी। जब मुझे यह पता चला है, तो मैंने इसे यहाँ चिपकाया है। और ऐसा लगता है कि दूसरों के बारे में बहुत कुछ पता नहीं था। अन्यथा, वे भी इस जवाब को चिपका सकते हैं और यदि कुंजी मौजूद नहीं है तो उस थ्रो अपवाद को जोड़ सकते हैं। वैसे भी, चेतावनी के लिए धन्यवाद।
FrenkyB

31

यह नहीं है कि कैसे TryGetValueकाम करता है। यह कुंजी के पाए जाने या न होने के आधार पर वापस लौटता है, trueया यदि कुंजी है तो falseइसके outपैरामीटर को संबंधित मान पर सेट करता है।

यदि आप जांचना चाहते हैं कि क्या कुंजी है या नहीं और ऐसा कुछ है जब यह गायब है, तो आपको कुछ इस तरह की आवश्यकता है:

bool hasValue = Data_Array.TryGetValue("XML_File", out value);
if (hasValue) {
    xmlfile = value;
} else {
    // do something when the value is not there
}


5
static void XML_Array(Dictionary<string, string> Data_Array)
{
    String value;
    if(Data_Array.TryGetValue("XML_File", out value))
    {
     ... Do something here with value ...
    }
}

5
static String findFirstKeyByValue(Dictionary<string, string> Data_Array, String value)
{
    if (Data_Array.ContainsValue(value))
    {
        foreach (String key in Data_Array.Keys)
        {
            if (Data_Array[key].Equals(value))
                return key;
        }
    }
    return null;
}

2
          private void button2_Click(object sender, EventArgs e)
            {
                Dictionary<string, string> Data_Array = new Dictionary<string, string>();
                Data_Array.Add("XML_File", "Settings.xml");

                XML_Array(Data_Array);
            }
          static void XML_Array(Dictionary<string, string> Data_Array)
            {
                String xmlfile = Data_Array["XML_File"];
            }

2

यहाँ उदाहरण है जो मैं अपने स्रोत कोड में उपयोग करता हूं। मैं अपने शब्दकोश में तत्वों की संख्या 0 से तत्वों की कुंजी और मूल्य प्राप्त कर रहा हूं। फिर मैं अपना स्ट्रिंग [] सरणी भरता हूं जिसे मैं अपने फ़ंक्शन के बाद एक पैरामीटर के रूप में भेजता हूं जो केवल पैरामस स्ट्रिंग को स्वीकार करता है []

    Dictionary<string, decimal> listKomPop = addElements();
    int xpopCount = listKomPop.Count;
    if (xpopCount > 0)
    {
        string[] xpostoci = new string[xpopCount];
        for (int i = 0; i < xpopCount; i++)
        {
            /* here you have key and value element */
            string key = listKomPop.Keys.ElementAt(i);
            decimal value = listKomPop[key];

            xpostoci[i] = value.ToString();
        }
    ...

आशा है कि यह आपकी और दूसरों की मदद करेगा। यह सॉल्यूशन सॉर्टेड वर्क के साथ भी काम करता है।

सधन्यवाद,

ओजरेन सिरोला


1

मैं एक फ़ंक्शन में dasblinkenlight के लिए एक समान विधि का उपयोग करता हूं कुकी से एक एकल कुंजी मान को वापस करने के लिए एक JSON सरणी जिसमें एक शब्दकोश में लोड किया गया है निम्नानुसार है:

    /// <summary>
    /// Gets a single key Value from a Json filled cookie with 'cookiename','key' 
    /// </summary>
    public static string GetSpecialCookieKeyVal(string _CookieName, string _key)
    {
        //CALL COOKIE VALUES INTO DICTIONARY
        Dictionary<string, string> dictCookie =
        JsonConvert.DeserializeObject<Dictionary<string, string>>
         (MyCookinator.Get(_CookieName));

        string value;
        if (dictCookie.TryGetValue( _key, out value))
        {
            return value;
        }
        else
        {
            return "0";
        }

    }

जहां "MyCookinator.Get ()" एक और सरल कुकी फ़ंक्शन है, जो http कुकी समग्र मूल्य प्राप्त कर रहा है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.