Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在内存中保存x个最频繁/最不频繁出现的keyvaluepair的方法_C#_Data Structures - Fatal编程技术网

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();
}