jjzjj

Dictionary

全部标签

c# - 如何在字典中插入第一个元素?

我有一个字典结构,里面有多个键值对。myDict.Add(key1,value1);myDict.Add(key2,value2);myDict.Add(key3,value3);我的词典用作某些控件的数据源。在控件的下拉列表中,我看到项目是这样的:key1key2key3顺序看起来和我的字典一模一样。我知道Dictionary不像arrayList-你可以获得索引左右。我不能使用sortedDictionary。现在我需要在我的程序的某个点向这个字典添加一个键值对,我希望它和我这样做有同样的效果:myDict.Add(newKey,newValue);myDict.Add(key1,

c# - 反转字典中的键和值

我想反转字典的键和值。即来自源字典Dictionary,我想得到Dictionary>.有List因为该值可以在不同键下多次出现在源字典中。例子:{1:"A"2:"A"3:"A"4:"B"5:"B"6:"C"7:"D"}将转换为:{"A":[1,2,3]"B":[4,5]"C":[6]"D":[7]}感谢您的帮助。编辑:好的,在你们的帮助下,我对这个算法有了一些了解。现在我看到了两种可能的解决方案(以及其他),但不知道它们之间的真正区别是什么,因为结果似乎是一样的。是否存在任何性能问题?varbyLookup=actions.ToLookup(pair=>pair.Value,pair

c# - 我应该在访问字典之前检查特定键是否存在于字典中吗?

我是否应该检查字典中是否存在特定键如果我确定它会在我到达访问它的代码时添加到字典中?有两种方法可以访问字典中的值检查ContainsKey方法。如果它返回true,那么我将使用字典对象的索引器[key]进行访问。或TryGetValue将返回true或false以及通过out参数返回值。(如果我想获得值(value),第二个将比第一个表现更好。Benchmark。)但是,如果我确定访问全局字典的函数肯定有key,那么我是否仍应使用TryGetValue检查或不检查我应该使用indexer[]。或者我永远不应该假设并始终检查? 最佳答案

c# - 键是一对整数的字典

我需要使用字典,其中TKey是一对整数。我考虑过使用KeyValuePair作为我的key类型,我想知道这是否是最好的解决方法。我也很想知道字典是否会为具有相同整数的两个不同的KeyValuePair对象创建单独的条目以及为什么。例如:varmyDictionary=newDictionary,string>();myDictionary.Add(newKeyValuePair(3,3),"FirstItem");myDictionary.Add(newKeyValuePair(3,3),"SecondItem");//doesthedictionaryallowthis?

c# - 使用 LINQ 和 LINQ 扩展计算字典中的值

我有一本看起来像这样的字典:Dictionary>test1:1,3,4,5test2:2,3,6,7test3:2,8如何使用LINQ和LINQ扩展获取所有值的计数? 最佳答案 假设您有:Dictionary>dict=...如果你想要列表的数量,很简单:intresult=dict.Count;如果你想要所有列表中所有字符串的总数:intresult=dict.Values.Sum(list=>list.Count);如果您想要计算所有列表中所有不同字符串的数量:intresult=dict.Values.SelectMany(

c# - 如何在 C# 中将 Dictionary<> 转换为 Hashtable?

我看到很多关于如何将哈希表转换为字典的问题/答案,但如何将字典转换为哈希表? 最佳答案 最简单的方法是使用Hashtable的构造函数:vardictionary=newDictionary();//...fillthedictionaryvarhashtable=newHashtable(dictionary); 关于c#-如何在C#中将Dictionary转换为Hashtable?,我们在StackOverflow上找到一个类似的问题: https://s

c# - 最有效的 Dictionary<K,V>.ToString() 格式?

将字典转换为格式化字符串的最有效方法是什么。例如:我的方法:publicstringDictToString(Dictionaryitems,stringformat){format=String.IsNullOrEmpty(format)?"{0}='{1}'":format;stringitemString="";foreach(variteminitems){itemString=itemString+String.Format(format,item.Key,item.Value);}returnitemString;}有没有更好/更简洁/更高效的方式?注意:字典最多有10个项

c# - C# 字典的原子 AddOrUpdate

假设如下代码:if(myDictionary.ContainsKey(aKey))myDictionary[aKey]=aValue;elsemyDictionary.Add(aKey,aValue);这段代码访问字典两次,一次是判断aKey是否存在,另一次是更新(如果存在)或者添加(如果不存在)。我想当这段代码只执行几次时,这种方法的性能是“可以接受的”。但是,在我的应用程序中,类似的代码大约执行了50万次。我分析了我的代码,它显示80%的CPU时间花在了这部分(见下图),因此这激发了改进。请注意,字典是lambdas。第一个解决方法很简单:myDictionary[aKey]=aV

c# - 澄清 C# 字典上的读写

在本声明的上下文中,ADictionarycansupportmultiplereadersconcurrently,aslongasthecollectionisnotmodified.Evenso,enumeratingthroughacollectionisintrinsicallynotathread-safeprocedure.Intherarecasewhereanenumerationcontendswithwriteaccesses,thecollectionmustbelockedduringtheentireenumeration.Toallowthecollect

c# - HashHelpers.GetPrime 中这一行的目的是什么?

我正在研究.NET的字典实现,发现了一个我很好奇的函数:HashHelpers.GetPrime。它所做的大部分工作都非常简单,它会寻找一个大于某个最小值的质数,并将其作为参数传递给它,显然是为了在类似哈希表的结构中用作多个桶的特定目的。但有一个神秘的部分:if(HashHelpers.IsPrime(j)&&(j-1)%101!=0){returnj;}(j-1)%101!=0检查的目的是什么?即,为什么我们显然希望避免使用比101的倍数多1的桶? 最佳答案 comments解释得很好:‘InitHash’isbasicallya