获取给定键的KeyValuePair

7

如果给定一个作为 Dictionary<String, List<String>> 中的KeyString,我该如何检索与该Key对应的KeyValuePair<String, List<String>>


List<String> values = dict["myKey"]; - jdweng
也许我不理解,但是为什么不直接调用 oDico["Key"] 来检索列表呢? - Mathieu
1
@jdweng和Mathieu - OP需要选定键的"KeyValuePair<String, List<String>>",而不仅仅是List<String>。 - Developer
开发者:OP已经有了密钥。请再次阅读帖子。 - jdweng
这就是为什么我进行注释,以提出一个可能会揭示有关概念的误解的问题。个人而言,我不认为有任何理由处理KVP,也许我正在错过一个伟大的概念 ;) - Mathieu
2个回答

6

使用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]);
    }
}

这是相关代码的fiddle链接:https://dotnetfiddle.net/Zg8x7s,原始代码来自David Pine的回答,特此致谢。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接