c# - 按值对 <key, value> 对进行高效排序

标签 c# .net performance sorting

我正在寻找对一堆 pairs<string, float> 进行排序的最有效方法按值计算,因为我需要获得大量对中的 3 个最高条目。

我的自然 react 是使用 sortedList,但显然它只能按键排序,而且我不能使用反向列表解决方案,因为我知道字符串是唯一的,但 float 可能不是。

我忽略了任何简单有效的解决方案吗?

最佳答案

如果您只需要知道前三个值,则不需要对整个列表进行排序 - 您可以只执行一次,一次存储前三个值。这将使它成为 O(n) 而不是 O(n log n)...但是你必须自己实现它。

如果您对 O(n log n) 满意,最简单的方法可能是使用 LINQ:

var ordered = pairs.OrderBy(pair => pair.Value).Take(3).ToList();

实现类似这样的东西可能不会太难:

public static IEnumerable<TSource> TakeTop<TSource, TKey>
    (this IEnumerable<TSource> source,
     Func<TSource, TKey> keySelector,
     int count)

复杂度可能为 O(n * count)。如果我有更多时间,我会为了好玩而做...

关于c# - 按值对 <key, value> 对进行高效排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209150/

相关文章:

c# - HttpResponse.End 与 HttpResponse.Close 与 HttpResponse.SuppressContent

c# - 如何使用 .NET 捕获桌面视频?

c++ - 将数组中的简单数据类型移动到特定位置的最快方法

c# - Cross Thread错误处理形式与Timer

c# - 从非托管 C++ 调用 C# 传递或返回 "Complex"类型

c# - 在 XElement 查询方面需要一些帮助

javascript - 为什么这种迭代方法更快?

java - Java中推荐使用ArrayList和HashMap?

c# - 使用非键添加关联

javascript - 将任何数字与 null 相乘应该在 typescript 中返回 null 而不是 0