dapatkan nilai kamus dengan kunci


183

Bagaimana saya bisa mendapatkan nilai kamus berdasarkan fungsi

kode fungsi saya adalah ini (dan perintah yang saya coba tetapi tidak berhasil):

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

kode tombol saya adalah ini

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

Saya ingin sesuatu seperti ini:
pada XML_Arrayfungsi menjadi
string xmlfile = Settings.xml

Jawaban:


249

Sesederhana ini:

String xmlfile = Data_Array["XML_File"];

Perhatikan bahwa jika kamus tidak memiliki kunci yang sama "XML_File", kode itu akan mengeluarkan pengecualian. Jika Anda ingin memeriksa terlebih dahulu, Anda dapat menggunakan TryGetValue seperti ini:

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

Mengapa tidak menggunakan nama kunci saja di kamus, C # memiliki ini:

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

Jika Anda melihat saran tip:

masukkan deskripsi gambar di sini


4
Itu melempar pengecualian jika kunci tidak ada. Itulah sebabnya jawaban orang lain menyarankan Anda untuk menggunakan TryGetValue.
Ladislav Ondris

Saya tidak berpikir jadi itu alasannya.
FrenkyB

1
Maksud kamu apa?
Ladislav Ondris

1
Saya rasa ini bukan alasan mengapa orang lain menyarankan TryGetValue. Solusi saya adalah penyederhanaan, yang tidak saya sadari. Ketika saya menemukannya, saya menempelkannya di sini. Dan tampaknya banyak orang lain yang tidak tahu tentang itu juga. Kalau tidak, mereka juga bisa menempelkan jawaban ini dan menambahkan bahwa melempar pengecualian jika kunci tidak ada. Bagaimanapun, terima kasih atas peringatan.
FrenkyB

31

Itu bukan cara TryGetValuekerjanya. Ini mengembalikan trueatau falseberdasarkan pada apakah kunci ditemukan atau tidak, dan menetapkan outparameternya ke nilai yang sesuai jika kunci ada di sana.

Jika Anda ingin memeriksa apakah kunci ada atau tidak dan melakukan sesuatu ketika hilang, Anda perlu sesuatu seperti ini:

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

Berikut adalah contoh yang saya gunakan dalam kode sumber saya. Saya mendapatkan kunci dan nilai dari Kamus dari elemen 0 ke jumlah elemen dalam Kamus saya. Kemudian saya mengisi larik string [] yang saya kirim sebagai parameter setelah pada fungsi saya yang hanya menerima 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();
        }
    ...

Semoga ini bisa membantu Anda dan orang lain. Solusi ini juga berfungsi dengan SortedDictionary.

Salam,

Ozren Sirola


1

Saya menggunakan metode yang mirip dengan dasblinkenlight dalam fungsi untuk mengembalikan nilai kunci tunggal dari Cookie yang berisi array JSON yang dimuat ke dalam Kamus sebagai berikut:

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

    }

Di mana "MyCookinator.Get ()" adalah fungsi Cookie sederhana lainnya yang mendapatkan nilai keseluruhan cookie http.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.