C# 在内存中保存x个最频繁/最不频繁出现的keyvaluepair的方法
我被传递了一系列C# 在内存中保存x个最频繁/最不频繁出现的keyvaluepair的方法,c#,data-structures,C#,Data Structures,我被传递了一系列keyvaluepair对,其中字符串表示一个值,uint表示该值在源数据中出现的频率。我需要能够在内存中保存x最频繁/最不频繁出现的值,以及它的频率 在这种情况下,x应该相当小,但我可能要检查几百万对。还请注意,我无法改变通过配对的方式 最好的办法是什么?我猜拥有两个数组可能是最好的选择,当每个值都被传递时,根据值的不同,将其插入到排序后的数组中,并将最不频繁/最频繁的值删除。听起来像是在搜索数据结构。只需构建两个,一个用于最常用的对,另一个用于最不常用的对,并动态填充它们和/
keyvaluepair
对,其中字符串表示一个值,uint表示该值在源数据中出现的频率。我需要能够在内存中保存x最频繁/最不频繁出现的值,以及它的频率
在这种情况下,x应该相当小,但我可能要检查几百万对。还请注意,我无法改变通过配对的方式
最好的办法是什么?我猜拥有两个数组可能是最好的选择,当每个值都被传递时,根据值的不同,将其插入到排序后的数组中,并将最不频繁/最频繁的值删除。听起来像是在搜索数据结构。只需构建两个,一个用于最常用的对,另一个用于最不常用的对,并动态填充它们和/或仅保留相关数量的值——这对于优先级队列来说尤其容易。例如,要仅保存最大的十个项目(伪代码):
谢谢你的指点,康拉德。效果很好。我使用了C5通用集合库()中的一个实现。
PriorityQueue pq = new PriorityQueue();
foreach (var kvp in input) {
pq.Add(kvp);
if (pq.Count > 10)
pq.RemoveMin();
}