当您只想要最好的时候进行高效的分类

时间:2015-10-05 10:31:22

标签: c# sorting

我有5000个项目list,使用自定义算法排序 我只需要最好的一个,即排序完成后list[0]

所以我需要一个算法来获取列表的第一项,将它与第二项进行比较,然后比较这两项中较好的一项,第三项等。只需一个循环遍历整个列表(顺序n)

我应该在c#中使用哪种排序方法来实现这种相当常见的场景? 我相信我目前使用的Sort(..)算法是非常低效的。

2 个答案:

答案 0 :(得分:3)

您可以使用MoreLINQ's MaxBy()
根据您定义“最佳”的方式,您指定的选择器参数可能不同。

示例:您有一个字符串列表,“最佳值”是最长的字符串。

string longestString = listOfStrings.MaxBy(x => x.Length);

从链接的实现中可以看出,这是O(n)。这是未排序集合的最佳选择。

答案 1 :(得分:0)

我发现MoreLinq的MaxBy选项,投影,源和键有点过于复杂,只是使用我自己的代码作为扩展方法:

    public static T GetBest<T>(this List<T> list, IComparer<T> comparer)
    {
        if (list == null) throw new ArgumentNullException("list");
        if (comparer == null) throw new ArgumentNullException("comparer");
        if (list.Count > 0)
        {
            T best = list[0];
            for (int i = 1; i < list.Count; i++)
            {
                if (comparer.Compare(best, list[i]) > 0)
                {
                    best = list[i];
                }
            }
            return best;
        }
        return default(T);
    }