Array.BinarySearch()返回值

abe*_*nci 7 .net c#

我有以下数组:

double[] list = new double[] {0,0,100,100}
Run Code Online (Sandbox Code Playgroud)

为什么我要搜索29.6-3

Array.BinarySearch(list, 29.6)
Run Code Online (Sandbox Code Playgroud)

我期待+1-1.

返回参数的Array.BinarySearch()文档说:

如果找到值,则指定数组中指定值的索引.如果未找到值且值小于数组中的一个或多个元素,则为负数,它是第一个元素的索引的按位补码,其大于值.如果找不到值且值大于数组中的任何元素,则为负数,它是(最后一个元素的索引加1)的按位补码.

但这并没有对我说太多.

GSe*_*erg 11

如果未找到值且值小于数组中的一个或多个元素,则为负数,它是第一个元素的索引的按位补码,其大于值.

第一个大于29.6的元素是100指数为2.

~2-3.


Jam*_*are 6

您可以使用'〜'来获取按位补码,这将为您提供大于搜索项的第一项的索引.

如果Array不包含指定的值,则该方法返回一个负整数.您可以将按位补码运算符(〜)应用于否定结果(在Visual Basic中,Xor将负结果应用于-1)以生成索引.如果此索引大于或等于数组的大小,则数组中没有大于value的元素.否则,它是第一个元素的索引,它大于value.

来自MSDN

因此,如果你有:

var pos = Array.BinarySearch(list, 29.6);
Run Code Online (Sandbox Code Playgroud)

你可以查看:

if (pos < 0)
{
     Console.WriteLine("Not found, the result was {0} which is index {1}", pos, ~pos);
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,这意味着您-3将指示索引2是第一个大于搜索目标的项目.