【问题标题】:Array.BinarySearch() return valueArray.BinarySearch() 返回值
【发布时间】:2012-07-11 15:31:30
【问题描述】:

我有以下数组:

double[] list = new double[] {0,0,100,100}

如果我搜索29.6,为什么会得到-3

Array.BinarySearch(list, 29.6)

我期待+1-1

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

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

但这并没有对我说太多。

【问题讨论】:

标签: c# .net


【解决方案1】:

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

第一个大于 29.6 的元素是100,其索引为2

~2-3

【讨论】:

    【解决方案2】:

    您可以使用“~”进行按位补码,这将为您提供大于搜索项的第一项的索引。

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

    来自MSDN

    如果你有:

    var pos = Array.BinarySearch(list, 29.6);
    

    您可以查看:

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

    在您的情况下,这意味着您的 -3 表示索引 2 是比您的搜索目标大的第一项。

    【讨论】:

      【解决方案3】:

      这是你的答案: "一个负数,它是大于 value 的第一个元素的索引的按位补码。"

      因此,在您的情况下,您的搜索值 (29.6) 小于 100,这是您的数组列表中的第三个元素,3 的补码是 -3,这就是您得到的答案。

      在这里,我扩展了您的示例并创建了另一个具有一些不同值的数组列表 (list2),然后我搜索了与您相同的值 29.6,现在这个 29.6 值小于 100 但大于 25,并且在我的数组列表中 100 开启第 4 位,其补码为 -4。

      所以我得到结果 -4,如果我在我的数组列表中搜索了 20,我会得到答案 -3。

       double[] list = new double[] { 0, 0, 100, 100 };
              double[] list2 = new double[] { 10, 15, 25, 100 };
      
              int result = Array.BinarySearch(list, 29.6);
              int result2 = Array.BinarySearch(list2, 29.6);
      
              Response.Write("Your answer result:" + result.ToString() + "<br/>");
              Response.Write("Your answer result2:" + result2.ToString());
      

      我的代码结果:

                  Your answer result : -3
                  Your answer result2: -4 
      

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-14
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 2022-12-19
        • 2014-01-16
        相关资源
        最近更新 更多