キーで辞書値を取得する


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、2018

1
他の人がTryGetValueを提案しているのはこれが理由ではないと思います。私の解決策は、私が知らなかった簡素化です。見つけたら、ここに貼り付けました。そして、他の多くの人もそれについて知らなかったようです。それ以外の場合は、この回答を貼り付けて、キーが存在しない場合に例外をスローするように追加することもできます。とにかく、警告してくれてありがとう。
FrenkyB 2018

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

次のように、関数内のdasblinkenlightと同様のメソッドを使用して、DictionaryにロードされたJSON配列を含むCookieから単一のキー値を返します。

    /// <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 Cookieの全体的な値を取得する別の単純なCookie関数です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.