反向后对BinarySearch感到困惑

问题描述 投票:0回答:1

我想在降序列表中找到元素索引,但BinarySearch返回一个负数。为什么会这样?这是我的代码片段:

List<int> list = new List<int>();
list.Add(4);
list.Add(1);
list.Add(5);
list.Add(2);
list.Add(3);
list.Sort();
list.Reverse();
var elementIndex = list.BinarySearch(5);
c# binary-search
1个回答
1
投票

问题出在默认比较器中,它希望列表只按升序排序。如果要在按降序排序的列表上使用BinarySearch,则应实现IComparer接口。例如:

class ReverseComparer : IComparer<int>
{
    public int Compare(int x, int y)
    {
        return Comparer<int>.Default.Compare(y, x);
    }
}

然后将其作为参数传递给方法:

...
var elementIndex = list.BinarySearch(5, new ReverseComparer());
© www.soinside.com 2019 - 2024. All rights reserved.