首页 > 解决方案 > 二分查找返回负值

问题描述

我有一个系列列表和一个垂直注释。我想为垂直注释 (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 变量得到了没有意义的负值。

标签: c#winformscharts

解决方案


文档是这样说的:

返回 ... 如果找到项目,则排序列表中项目的从零开始的索引;否则,一个负数,它是下一个大于 item 的元素的索引的按位补码,或者,如果没有更大的元素,则为Count 的按位补码

请注意,后一个值也是负数。

否定结果意味着您要查找的内容不在列表中。也可以使用结果(通过将其反转为~result)来知道如果手头的值在列表中,它在哪里找到,或者您需要在哪里插入它以保持列表的良好排序。


推荐阅读