2016-08-24 3 views
2

Учитывая в String, что это Key содержится в Dictionary<String, List<String>>, как я могу извлечь KeyValuePair<String, List<String>>, что соответствует этому Key?Get KeyValuePair данный ключ

+0

Список значения = ДИКТ ["мой ключ"]; – jdweng

+0

Может быть, я не понимаю, но почему бы просто не позвонить напрямую oDico ["Key"], чтобы получить список? * – Mathieu

+1

@jdweng & Mathieu - OP требуется «KeyValuePair >» для выбранного ключа, а не просто Список Developer

ответ

5

Проблема с другими ответами с использованием 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

0

Обычно вы хотите значение, связанное с ключом, например:

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.

0

Использование LINQ существуют различные способы, но в основном это может быть более простым, чтобы построить его самостоятельно, если вы действительно хотите KeyValuePair:

if (dictionaryVar.ContainsKey(key)) { 
    KeyValuePair<string, List<string>> kvp = new KeyValuePair<string, List<string>>(key, dictionaryVar[key]); 
} 
Смежные вопросы