รับค่าพจนานุกรมโดยคีย์


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


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 []

    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 เช่นกัน

ขอแสดงความนับถือ,

Ozren Sirola


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 ()" เป็นอีกฟังก์ชั่น Cookie ที่ใช้งานง่ายที่ได้รับค่า http คุกกี้โดยรวม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.