Как выбрать из списка KeyValuePair?

У меня есть список KeyValuePair (ключ строкового типа, а значение типа int). И я хочу вернуть список пар ключ-значение, который получит мой пример критериев соответствия: вернуть список, где Key = «A» и Value = 10.

Как select будет работать с этим и как написать выражение, чтобы получить требуемый результат?


person Nilaksha Perera    schedule 15.10.2015    source источник


Ответы (2)


Вы можете использовать выражение LINQ следующим образом:

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

добавьте свои ключевые значения.

IList<KeyValuePair<string, int>> result = values.Where(v => v.Key == "A" && v.Value == 10).ToList();
person Guy Lowe    schedule 15.10.2015

Вместо использования списка KeyValuePair вы можете использовать

Dictionary <string, int> dictionary = new Dictionary <string, int> ().

Для поиска в нашей коллекции мы будем использовать оператор First, а еще лучше использовать оператор FirstOrDefault. Почему? Описание ниже. Поиск с помощью оператора выполняется намного быстрее, потому что коллекция просматривается поэлементно до первого встреченного элемента, удовлетворяющего условию. В то время как оператор Where выполняет поиск по всей коллекции.

Теперь мы добавляем новую запись в словарь, ключ должен быть уникальным (это не могут быть две записи с одним и тем же ключом).

Например, давайте добавим несколько записей в коллекцию.

dictionary.Add ("one", 1);
dictionary.Add ("two", 2);
dictionary.Add ("three", 3);

Теперь с помощью LINQ можно очень просто и быстро получить интересующий нас элемент. Затем мы можем искать ключевой элемент, потому что мы знаем, что он уникален. Есть два способа:

Первый способ гарантирует, что нам не будет возвращено исключение при отсутствии элемента поиска (например, Key = "четыре"). Результатом будет пустой ключ и значение 0.

KeyValuePair <string, int> results = dictionary.FirstOrDefault (v => v.Key.Equals ("two"));

Второй способ может выдать ошибку, когда элемент поиска отсутствует в коллекции.

KeyValuePair <string, int> results = dictionary.First (v => v.Key.Equals ("two"));

Теперь вы можете получить значения:

string key = results.Key;
int value = results.Value;
person elcudro    schedule 15.10.2015