我正在编写一个7张牌的扑克手牌评估程序,作为我最喜欢的项目之一。在尝试优化其速度(我喜欢挑战)时,我震惊地发现字典键查找的性能与数组索引查找相比相当慢。例如,我运行了这个示例代码,它列举了所有52种选择7=133,784,560种可能的7手牌:varintDict=newDictionary();varintList=newList();for(inti=0;i哪些输出:timefordictionarylookups:2532mstimeforarrayindexlookups:313ms这种行为是否符合预期(性能下降8倍)?IIRC,字典平均有O(1)次查找,而数组有最坏情况的O(
我想添加一个KeyValuePair到Dictionary我不能。我必须分别传递键和值,这必然意味着Add方法必须创建一个新的KeyValuePair对象才能插入,这效率不高。我不敢相信没有Add(KeyValuePair)重载Add方法。谁能提出这种明显疏忽的可能原因? 最佳答案 您可以使用IDictionary提供Add(KeyValuePair)的界面方法:IDictionarydictionary=newDictionary();dictionary.Add(newKeyValuePair(0,"0"));dictionar
C#中Dictionary.Clear和newDictionary()之间的主要区别是什么?在哪些情况下推荐使用哪一种? 最佳答案 Dictionary.Clear()将删除字典中的所有KeyValue对。执行newDictionary()将创建一个新的字典实例。当且仅当旧版本的字典未被另一个引用作为根时,创建新字典将使整个字典及其内容(未在其他地方作为根)可供GC清理。Dictionary.Clear()将使KeyValue对可用于清理。在实践中,这两个选项往往会产生非常相似的效果。区别在于在方法中使用this时会发生什么:voi
在C#字典中设置所有值的最佳方法是什么?这是我现在正在做的,但我确信有更好/更清洁的方法来做到这一点:Dictionarydict=GetDictionary();varkeys=dict.Keys.ToList();for(inti=0;i我已经用foreach尝试了一些其他方法,但我有错误。 最佳答案 这是一个合理的方法,尽管我更喜欢:foreach(varkeyindict.Keys.ToList()){dict[key]=false;}对ToList()的调用使这项工作有效,因为它正在拉出并(暂时)保存键列表,所以迭代有效。
如何转换Dictionary到NameValueCollection?我们项目的现有功能返回一个老式的NameValueCollection我用LINQ修改了它。结果应作为NameValueCollection传递.我想以一种通用的方式解决这个问题。有什么提示吗? 最佳答案 为什么不使用简单的foreach循环?foreach(varkvpindict){nameValueCollection.Add(kvp.Key.ToString(),kvp.Value.ToString());}这可以嵌入到扩展方法中:publicstatic
我有以下字典:IDictionary>myDictionary我想将字典中的所有值作为IList获取....只是为了添加一些关于我是如何陷入这种情况的背景......我有一个方法可以获取MyClass列表。然后我有另一种方法将该列表转换为字典,其中键是MyClass的id。稍后......并且无法访问该原始列表......我需要获取MyClass的原始未分组列表。当我将myDictionary.Values.ToList()传递给采用IList的方法时,出现编译错误,指出它无法从System.Collections.Generic.List>到:System.Collections.G
我想比较两个Dictionary的内容实例不管它们包含的项目的顺序如何。SequenceEquals也比较顺序,所以我先按键排序字典,然后调用SequenceEquals.有没有我可以使用的方法来代替SequenceEquals那只会比较内容?如果没有,这是执行此操作的理想方法吗?Dictionarysource=newDictionary();Dictionarytarget=newDictionary();source["foo"]="bar";source["baz"]="zed";source["blah"]=null;target["baz"]="zed";target["b
我正在尝试实现一个编辑页面,以便管理员修改数据库中的数据。不幸的是,我遇到了一个错误。下面的代码:publicViewResultEdit(intproductId){//Dosomethinghere}但是我收到这个错误:"Theparametersdictionarycontainsanullentryforparameter'productId'ofnon-nullabletype'System.Int32'formethod'System.Web.Mvc.ViewResultEdit(Int32)'in'WebUI.Controllers.AdminController'.To
我今天心情低落...有谁知道一种快速而优雅的方法来转换字典,使键变成值,反之亦然?例子:varoriginalDictionary=newDictionary(){{1,"One"},{2,"Two"},{3,"Three"}};成为varnewDictionary=newDictionary();//contents://{//{"One",1},{"Two",2},{"Three",3}//}; 最佳答案 使用ToDictionary?orignalDictionary.ToDictionary(kp=>kp.Value,kp=
我是MVC的新手。在我的应用程序中,我正在从Mydatabase中检索数据。但是当我运行我的应用程序时,它会显示这样的错误这是我的网址http://localhost:7317/Employee/DetailsData/4ExceptionDetails:System.ArgumentException:Theparametersdictionarycontainsanullentryforparameter'k'ofnon-nullabletype'System.Int32'formethod'System.Web.Mvc.ActionResultDetailsData(Int32)