直接从字典中获取KeyValuePair我有System.Collections.Generic.Dictionary字典,其中A和B是类,实例Aa(其中dict.ContainsKey(a)为真)。是否可以直接从字典中获取KeyValuePair?或者我是否需要创建一个新的KeyValuePair:newKeyValuePair(a,dict[a])?您需要创建一个新的KeyValuePair1-但请记住,KVP是一种值类型(结构),因此这样做不会引入新的低效率。任何返回KVP的方法都会创建一个副本——您只是在直接创建实例。如果需要,您始终可以向IDictionary添加扩展方法:正如评论中指出的那样,存储在字典中键完全有可能与提供的键不同,只是在语义上相同——通过一些可以由IEqualityComparer自定义的语义(例如,与不区分大小写的字典一样。)在这种情况下,上面的代码不会返回字典中的实际条目,而是包含您提供的用于查找的键的条目。不幸的是,没有找到原始键的有效方法-你必须迭代字典:(1我知道你可以迭代字典条目并找到相应的条目,但是当你有一个非常好的索引器时,那是O(1),我看不出你为什么要这样做而不是O(N)。当Dictionary实现IEnumerable>时,可以使用linq:varpair=_dictionary.SingleOrDefault(p=>p.Key==myKey);我们不能这样得到“IPHone”:vardict=newDictionary(StringComparer.OrdinalIgnoreCase){{“IPHone”,“TCP/IPhoningtools”}};Console.WriteLine(dict["iPhone"]);//“TCP/IP磨练工具”Console.WriteLine(???);//“IPHone”似乎没有使用当前API的O(1)解决方案,但循环遍历所有条目有效:varkeyValue=dict.First(p=>dict.Comparer.Equals(p.Key,"iPhone”));控制台.WriteLine(keyValue.Key);//"IPHone"Console.WriteLine(keyValue.Value);//“TCP/IPhoning工具”或作为惰性扩展:[Pure]publicstaticKeyValuePairGetEntry(thisDictionarydictionary,TKeykey){varcomparer=dictionary.Comparer;返回dictionary.FirstOrDefault(p=>comparer.Equals(p.Key,key));}对我来说myDict.AsEnumerable就是这样做的...以上是C#学习教程:直接从字典中获取KeyValuePair共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
