我经常需要按值排序字典,包括键和值.例如,我有一个单词的散列和各自的频率,我想按频率排序.
有一个SortedList对单个值(比如频率)有好处,我想将它映射回单词.
SortedDictionary按键排序,而不是值.有些人诉诸于自定义课程,但是有更清洁的方法吗?
我需要一个像a一样的数据结构,SortedDictionary<int, double>但是根据值而不是键来排序.当我们在字典中有大约3000个项目时,我需要大约1-2微秒来添加和删除项目.
我的第一个想法是简单地在我的代码中切换键和值.这几乎是有效的.通过这样做,我可以在测试中添加和删除元素大约1.2微秒.
但是键必须在SortedDictionary中是唯一的,这意味着我的逆字典中的值必须是唯一的.在某些情况下,他们可能不会.
.NET库中的某些想法已经对我有用吗?
假设我有这样的字典
dict1 = {{[4,bcefgh]},{[5,abcefgh]},{[6,efgh]},{[7,bcefgh]},{[10,cefghi]}}
Run Code Online (Sandbox Code Playgroud)
我想在此字典中根据字符串值的长度对对进行排序,而无需使用额外的循环,即结果应为:
dict1 = {{[6,efgh]},{[4,bcefgh]},{[7,bcefgh]},{[10,cefghi]},{[5,abcefgh]}}
Run Code Online (Sandbox Code Playgroud)
我的最初答案是创建一个单独的字典,该字典具有相同的键和每个对应字符串的长度,以及第三个字典,该字典对如下循环:
foreach (KeyValuePair<int,string> pair in dict1)
{
temp_dict.Add(pair.Key, pair.Value.Count());
}
var items = from pair in temp_dict
orderby pair.Value ascending
select pair;
foreach (KeyValuePair<int, int> pair in items)
{
result_dict.Add(pair.Key, dict1[pair.Key]);
}
Run Code Online (Sandbox Code Playgroud)
但是,此结果现在对于大量数据是可行的。
提前谢谢