Получение KeyValuePair <> непосредственно из Словаря <>

2 ответа

Вам нужно создать новую KeyValuePair 1 - но имейте в виду, что KVP в любом случае является типом значения (структурой), так что это не похоже на вас » повторное введение новой неэффективности, делая это. Любой метод, возвращающий KVP, в любом случае будет создавать копию - вы просто создаете экземпляр напрямую.

Вы всегда можете добавить метод расширения к IDictionary , если хотите:

public static KeyValuePair<TKey, TValue> GetEntry<TKey, TValue>
    (this IDictionary<TKey, TValue> dictionary,
     TKey key)
{
    return new KeyValuePair<TKey, TValue>(key, dictionary[key]);
}

] Как отмечено в комментариях, вполне возможно, что ключ, который хранится в словаре, не тот же , что предоставлен, просто семантически равен - по некоторой семантике, которая может быть настроена с помощью IEqualityComparer (например, со словарем без учета регистра). В этом случае приведенный выше код не вернет фактическую запись в словаре, но запись с ключом, который вы предоставили для поиска. К сожалению, нет эффективного способа найти исходный ключ - вам придется перебирать словарь: (


1 Я знал, что вы можете перебирать словарные статьи и таким образом находить подходящую запись, но я не вижу причин, по которым вы когда-либо хотели бы это сделать, если у вас есть отличный индексатор, который имеет O (1) вместо O (N).

39
ответ дан 27 November 2019 в 20:38
поделиться

Поскольку Dictionary реализует IEnumerable > , вы можете использовать linq:

var pair = _dictionary.SingleOrDefault(p => p.Key == myKey);
18
ответ дан 27 November 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: