none
C# Dictionary RRS feed

  • Frage

  • Ich habe vor kurzem ein Problem mit Dictionarys gehabt und habe es mit der Linq Methode gelöst:

    Mir wurde gesagt, dass man auch mit Schleifen das Dictionary durchlaufen kann und zu der passenden Value den Key finden, vielleicht könnte mir jemand zeigen wie so etwas geht (ohne Linq)

    Grüße, Max

    Dienstag, 9. Mai 2017 17:53

Antworten

  • Hallo Max,

    man kann ein Dictionary ganz konventionell mit einem Enumerator, d. h. foreach durchlaufen. Dabei wird eine KeyValuePair<K, V> zurückgeliefert, auf die man u. a. Vergleiche vornehmen kann:

                Dictionary<int, string> dict = new Dictionary<int, string>()
                    {
                        {1, "eins"},
                        {2, "zwei"},
                        {3, "drei"},
                        { 4, "vier"},
                        {999, "eins" }
                    };
    
                foreach(KeyValuePair<int, string>kvp in dict)
                {
                    if (kvp.Value == "eins")
                    {
                        Console.WriteLine($"{kvp.Key} => {kvp.Value}");
                    }
                }
    

    Man muss sich dabei nur entscheiden, welchen Schlüssel man nehmen will, wenn der Wert mehrmalig vorkommt - oben simuliert für "eins" <= {1, 999}.

    Gruß Elmar

    Dienstag, 9. Mai 2017 18:38
    Beantworter
  • Hi Max,
    geh einfach mit einer foreach-Schleife durch alle Elemente des Wörterbuches, z.B. so:

            Dictionary<int, string> dic = new Dictionary<int, string>()
            { { 1, "D" }, { 2, "B" }, { 3, "C" }, { 4, "A" }, { 5, "D" } };
    
            foreach (var item in dic) if (item.Value == "D")
                Console.Out.Write($"Value: {item.Value}, Key: {item.Key}{Environment.NewLine}");


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 9. Mai 2017 18:40

Alle Antworten

  • Hallo Max,

    man kann ein Dictionary ganz konventionell mit einem Enumerator, d. h. foreach durchlaufen. Dabei wird eine KeyValuePair<K, V> zurückgeliefert, auf die man u. a. Vergleiche vornehmen kann:

                Dictionary<int, string> dict = new Dictionary<int, string>()
                    {
                        {1, "eins"},
                        {2, "zwei"},
                        {3, "drei"},
                        { 4, "vier"},
                        {999, "eins" }
                    };
    
                foreach(KeyValuePair<int, string>kvp in dict)
                {
                    if (kvp.Value == "eins")
                    {
                        Console.WriteLine($"{kvp.Key} => {kvp.Value}");
                    }
                }
    

    Man muss sich dabei nur entscheiden, welchen Schlüssel man nehmen will, wenn der Wert mehrmalig vorkommt - oben simuliert für "eins" <= {1, 999}.

    Gruß Elmar

    Dienstag, 9. Mai 2017 18:38
    Beantworter
  • Hi Max,
    geh einfach mit einer foreach-Schleife durch alle Elemente des Wörterbuches, z.B. so:

            Dictionary<int, string> dic = new Dictionary<int, string>()
            { { 1, "D" }, { 2, "B" }, { 3, "C" }, { 4, "A" }, { 5, "D" } };
    
            foreach (var item in dic) if (item.Value == "D")
                Console.Out.Write($"Value: {item.Value}, Key: {item.Key}{Environment.NewLine}");


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 9. Mai 2017 18:40