отримати значення словника за ключем


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);
}

Я хочу що - щось на зразок цього:
на XML_Arrayфункції буде
рядок XMLFILE = Settings.xml

Відповіді:


249

Це так просто, як це:

String xmlfile = Data_Array["XML_File"];

Зауважте, що якщо у словнику немає ключа, що дорівнює "XML_File", цей код видасть виняток. Якщо ви хочете перевірити спочатку, ви можете використовувати TryGetValue так:

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
}

21
Dictionary<String,String> d = new Dictionary<String,String>();
        d.Add("1","Mahadev");
        d.Add("2","Mahesh");
        Console.WriteLine(d["1"]);// it will print Value of key '1'

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 до кількості елементів мого словника. Тоді я заповнюю свій масив string [], який я надсилаю як параметр у своїй функції, яка приймає лише рядок params []

    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();
        }
    ...

Сподіваюся, що це допоможе вам та іншим. Це рішення працює і з SortedDictionary.

З повагою,

Озрен Сірола


1

Я використовую аналогічний метод до dasblinkenlight's у функції, щоб повернути значення одного ключа з Cookie, що містить масив 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 ()" - це ще одна проста функція cookie, яка отримує загальне значення файлу cookie.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.