키로 사전 값을 얻습니다


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

사전에 키 이름을 사용하지 않는 이유는 다음과 같습니다.

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

팁 제안을 보면 :

여기에 이미지 설명을 입력하십시오


4
키가 존재하지 않으면 예외가 발생합니다. 그렇기 때문에 다른 사람들의 대답에 따라 TryGetValue를 사용해야한다고 제안합니다.
Ladislav Ondris

나는 그렇게 생각하지 않습니다.
FrenkyB

1
무슨 소리 야?
Ladislav Ondris

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에서 사전의 요소 수까지 사전에서 을 얻습니다 . 그런 다음 params string [] 만 허용하는 함수에서 매개 변수로 보낸 string [] 배열을 채 웁니다.

    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

비슷한 방법을 사용하여 다음과 같이 사전에로드 된 JSON 배열을 포함하는 쿠키에서 단일 키 값을 반환하는 함수에 dasblinkenlight를 사용합니다.

    /// <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 쿠키 전체 값을 가져 오는 또 다른 간단한 쿠키 함수입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.