c# - 二分查找返回负值
问题描述
我有一个系列列表和一个垂直注释。我想为垂直注释 (VA) 的每个 X 位置获得信号的 Y 值。
这是我到目前为止所做的。
VerticalAnnotation VA;
List<double> Points = new List<double>();
foreach (var sig in Signals)
{
for (int g = 0; g < sig.Points.Count; g++)
{
Points.Add(sig.Points[g].XValue);
}
Points.Sort();
}
和
private void chart1_AnnotationPositionChanging(object sender, AnnotationPositionChangingEventArgs e)
{
var x = Points.BinarySearch(VA.X);
}
但是由于某种原因,x 变量得到了没有意义的负值。
解决方案
文档是这样说的:
返回 ... 如果找到项目,则排序列表中项目的从零开始的索引;否则,一个负数,它是下一个大于 item 的元素的索引的按位补码,或者,如果没有更大的元素,则为Count 的按位补码
请注意,后一个值也是负数。
否定结果意味着您要查找的内容不在列表中。也可以使用结果(通过将其反转为~result
)来知道如果手头的值在列表中,它会在哪里找到,或者您需要在哪里插入它以保持列表的良好排序。