0 Pluspunkte 0 Minuspunkte

Wie kann ich in einer

List<KeyValuePair<string, int>> keyValuePairList = new List<KeyValuePair<string, int>>();

einen bestimmten Eintrag z.B anhand des Key oder des Value finden? Bei einer List kann ich ja z.B

if(list.Contains(element)) {}

machen. Wie mache ich das mit der Liste aus KeyValuePairs?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Um einen bestimmten Eintrag zu finden, kannst du LINQ verwenden.

// Erstelle eine Liste von KeyValuePair
List<KeyValuePair<string, int>> keyValuePairList = new List<KeyValuePair<string, int>>()
{
	new KeyValuePair<string, int>("A", 1),
	new KeyValuePair<string, int>("B", 2),
	new KeyValuePair<string, int>("C", 3)
};

// Suche nach einem Eintrag anhand des Keys
string searchKey = "B";
var foundByKey = keyValuePairList.FirstOrDefault(kvp => kvp.Key == searchKey);

if (!foundByKey.Equals(default(KeyValuePair<string, int>)))
{
	Console.WriteLine($"Gefunden: Key = {foundByKey.Key}, Value = {foundByKey.Value}");
}
else
{
	Console.WriteLine("Key nicht gefunden.");
}

// Suche nach einem Eintrag anhand des Values
int searchValue = 3;
var foundByValue = keyValuePairList.FirstOrDefault(kvp => kvp.Value == searchValue);

if (!foundByValue.Equals(default(KeyValuePair<string, int>)))
{
	Console.WriteLine($"Gefunden: Key = {foundByValue.Key}, Value = {foundByValue.Value}");
}
else
{
	Console.WriteLine("Value nicht gefunden.");
}
von (776 Punkte)  
0 Pluspunkte 0 Minuspunkte

Hier ist ein Beispiel ohne LINQ um eine List<KeyValuePair>> zu durchsuchen indem du die Liste durchläufst und die Werte vergleichst.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<KeyValuePair<string, int>> keyValuePairList = new List<KeyValuePair<string, int>>()
        {
            new KeyValuePair<string, int>("Wien", 1),
            new KeyValuePair<string, int>("Bregenz", 2),
            new KeyValuePair<string, int>("Graz", 3)
        };

        // Suche nach Key
        string searchKey = "Bregenz";
        KeyValuePair<string, int> foundByKey = default;

        foreach (var kvp in keyValuePairList)
        {
            if (kvp.Key == searchKey)
            {
                foundByKey = kvp;
                break;
            }
        }

        if (!foundByKey.Equals(default(KeyValuePair<string, int>)))
        {
            Console.WriteLine($"Gefunden: Key = {foundByKey.Key}, Value = {foundByKey.Value}");
        }
        else
        {
            Console.WriteLine("Key nicht gefunden.");
        }

        // Suche nach Value
        int searchValue = 3;
        KeyValuePair<string, int> foundByValue = default;

        foreach (var kvp in keyValuePairList)
        {
            if (kvp.Value == searchValue)
            {
                foundByValue = kvp;
                break;
            }
        }

        if (!foundByValue.Equals(default(KeyValuePair<string, int>)))
        {
            Console.WriteLine($"Gefunden: Key = {foundByValue.Key}, Value = {foundByValue.Value}");
        }
        else
        {
            Console.WriteLine("Value nicht gefunden.");
        }
    }
}
von (732 Punkte)