Учитывая в String
, что это Key
содержится в Dictionary<String, List<String>>
, как я могу извлечь KeyValuePair<String, List<String>>
, что соответствует этому Key
?Get KeyValuePair данный ключ
ответ
Проблема с другими ответами с использованием FirstOrDefault
заключается в том, что он будет последовательно искать весь словарь до тех пор, пока не найдет совпадение, и вы потеряете преимущество использования хэшированного поиска. Это кажется более разумным, если вам действительно нужно KeyValuePair
просто построить один, как это:
public class Program
{
public static void Main(string[] args)
{
var dictionary = new Dictionary<string, List<string>>
{
["key1"] = new List<string> { "1" },
["key2"] = new List<string> { "2" },
["key3"] = new List<string> { "3" },
};
var key = "key2";
var keyValuePair = new KeyValuePair<string, List<string>>(key, dictionary[key]);
Console.WriteLine(keyValuePair.Value[0]);
}
}
(с кредитом David Pine для исходного кода в его ответе).
Вот скрипку для этого: https://dotnetfiddle.net/Zg8x7s
Обычно вы хотите значение, связанное с ключом, например:
Dictionary<String, List<String>> dictionary = GetDictionary();
var value = dictionary["key"];
Но вы можете использовать Linq
, чтобы получить весь KeyValuePair
:
var dictionary = new Dictionary<string, List<string>>
{
["key1"] = new List<string> { "1" },
["key2"] = new List<string> { "2" },
["key3"] = new List<string> { "3" },
};
var keyValuePair = dictionary.FirstOrDefault(kvp => kvp.Key == "key2");
Console.WriteLine(keyValuePair?.Value[0]); // Prints "2"
Вот .NET Fiddle.
Использование LINQ существуют различные способы, но в основном это может быть более простым, чтобы построить его самостоятельно, если вы действительно хотите KeyValuePair:
if (dictionaryVar.ContainsKey(key)) {
KeyValuePair<string, List<string>> kvp = new KeyValuePair<string, List<string>>(key, dictionaryVar[key]);
}
- 1. регистронезависимы ключ для сравнения KeyValuePair
- 2. System.Collections.Generic.KeyNotFoundException: данный ключ отсутствовал в словаре; exception get in C#
- 3. данный ключ отсутствовал в словаре
- 4. Данный ключ отсутствовал в словаре. Какой ключ?
- 5. обновление KeyValuePair где ключ не ИНТ
- 6. Переименовать ключ/значение в KeyValuePair/Словарь
- 7. данный ключ не присутствовал ERROR
- 8. Данный ключ отсутствовал в словаре?
- 9. Данный ключ не присутствовал в словаре
- 10. «Данный ключ отсутствовал в словаре» nHibernate C#
- 11. данный ключ не присутствовал в словаре ошибки
- 12. 'Данный ключ отсутствовал в словаре' - но существует ключ
- 13. KeyValuePair Covariance
- 14. Получите максимальную KeyValuePair в списке <KeyValuePair>
- 15. PHP GET динамический ключ
- 16. (Иногда) Данный ключ не присутствовал в словаре
- 17. SolrNet - данный ключ отсутствовал в словаре
- 18. Glass Mapper - «Данный ключ отсутствовал в словаре»
- 19. Java, удалите данный ключ из иерархического отображения
- 20. Данный ключ не присутствовал в словаре
- 21. Данный ключ отсутствовал в словаре. System.Collections.Generic.KeyNotFoundException
- 22. WCF «Данный ключ отсутствует в словаре»
- 23. Данный ключ отсутствует в словаре на Activator.CreateInstance
- 24. Данный ключ не присутствовал в словаре - svn2tfs
- 25. «Данный ключ отсутствовал в словаре» - но это
- 26. Данный ключ отсутствовал в словаре. VB.NET
- 27. Как найти определенный элемент BST, данный ключ?
- 28. Получение ключа от KeyValuePair
- 29. C++/CLI: KeyValuePair <> Ключ и значение не существует
- 30. Parse Данный ключ не был указан в словаре
Список значения = ДИКТ ["мой ключ"]; –
jdweng
Может быть, я не понимаю, но почему бы просто не позвонить напрямую oDico ["Key"], чтобы получить список? * – Mathieu
@jdweng & Mathieu - OP требуется «KeyValuePair>» для выбранного ключа, а не просто Список –
Developer