我有以下数组:
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)的按位补码.
但这并没有对我说太多.
您可以使用'〜'来获取按位补码,这将为您提供大于搜索项的第一项的索引.
如果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是第一个大于搜索目标的项目.
| 归档时间: |
|
| 查看次数: |
7511 次 |
| 最近记录: |