lấy giá trị từ điển bằng khóa


183

Làm thế nào tôi có thể nhận được giá trị từ điển theo khóa trên chức năng

mã chức năng của tôi là mã này (và lệnh tôi thử nhưng không hoạt động):

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

mã nút của tôi là cái này

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

Tôi muốn một cái gì đó như thế này:
trên XML_Arrayhàm là
chuỗi xmlfile = Settings.xml

Câu trả lời:


249

Nó đơn giản như thế này:

String xmlfile = Data_Array["XML_File"];

Lưu ý rằng nếu từ điển không có khóa bằng "XML_File", mã đó sẽ đưa ra một ngoại lệ. Nếu bạn muốn kiểm tra trước, bạn có thể sử dụng TryGetValue như thế này:

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

Tại sao không chỉ sử dụng tên khóa trên từ điển, C # có điều này:

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

Nếu bạn nhìn vào gợi ý mẹo:

nhập mô tả hình ảnh ở đây


4
Nó ném một ngoại lệ nếu khóa không tồn tại. Đó là lý do tại sao câu trả lời của người khác đề nghị bạn nên sử dụng TryGetValue.
Ladislav Ondris

Tôi không nghĩ đó là lý do.
FrenkyB

1
Ý anh là gì?
Ladislav Ondris

1
Tôi không nghĩ rằng đây là lý do mà những người khác đang đề xuất TryGetValue. Giải pháp của tôi là đơn giản hóa, điều mà tôi không nhận thức được. Khi tôi tìm thấy nó, tôi đã dán nó ở đây. Và dường như nhiều người khác cũng không biết về điều đó. Mặt khác, họ cũng có thể dán câu trả lời này và thêm ngoại lệ đó nếu khóa không tồn tại. Dù sao, cảm ơn đã cảnh báo.
FrenkyB

31

Đó không phải là cách làm TryGetValueviệc. Nó trả về truehoặc falsedựa trên việc tìm thấy khóa hay không và đặt outtham số của nó thành giá trị tương ứng nếu khóa đó ở đó.

Nếu bạn muốn kiểm tra xem chìa khóa có ở đó hay không và làm gì đó khi thiếu, bạn cần một cái gì đó như thế này:

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

Đây là ví dụ mà tôi sử dụng trong mã nguồn của mình. Tôi nhận được khóagiá trị từ Từ điển từ phần tử 0 đến số phần tử trong Từ điển của tôi. Sau đó, tôi điền vào chuỗi [] mảng mà tôi gửi làm tham số sau trong hàm của mình, chỉ chấp nhận chuỗi 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();
        }
    ...

Hy vọng điều này sẽ giúp bạn và những người khác. Giải pháp này cũng hoạt động với SortedDipedia.

Trân trọng,

Ozren Sirola


1

Tôi sử dụng một phương thức tương tự như của dasblinkenlight trong một hàm để trả về một giá trị khóa duy nhất từ ​​Cookie chứa một mảng JSON được tải vào Từ điển như sau:

    /// <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";
        }

    }

Trong đó "MyCookinator.Get ()" là một hàm Cookie đơn giản khác nhận giá trị tổng thể của cookie http.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.