我想在降序列表中找到元素索引,但是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);
答案 0 :(得分: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());