首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Array.BinarySearch()会给出负数?

为什么Array.BinarySearch()会给出负数?
EN

Stack Overflow用户
提问于 2012-10-04 01:52:26
回答 3查看 5K关注 0票数 5

我有一些代码对我来说没有多大意义。我有一个字符串数组,并且在foreach()循环中使用二进制搜索对它们进行计数。除了排序之外,两次尝试输出的代码都是完全相同的。我不知道为什么我会得到这样的结果。我假设它应该以相同的方式计算两次数组的值。有什么帮助吗?

代码:

代码语言:javascript
复制
using System;
public class Driver {
    public static void Main(string [] args) {
        String [] s = {"Bob", "Jane", "Will", "Bill", "Liz"};

        Console.WriteLine("Before Sorting:\n----------");
        foreach(string item in s) {
            Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
        }
        Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);

        Console.WriteLine("\n\nAfter Sorting:\n----------");
        Array.Sort(s);
        foreach(string item in s) {
            Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
        }
        Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);
    }
}

输出:

代码语言:javascript
复制
Before Sorting:
----------
1. Bob
2. Jane
3. Will
0. Bill
-2. Liz
Will is at position 3

After Sorting:
----------
1. Bill
2. Bob
3. Jane
4. Liz
5. Will
Will is at position 5

我确信这是件很愚蠢的事,但我想不通。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-04 01:53:32

二进制搜索仅适用于排序的数组。它找不到值:

如果未找到value并且value小于数组中的一个或多个元素,则为

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

票数 5
EN

Stack Overflow用户

发布于 2012-10-04 01:54:21

Array.BinarySearch要求对数组进行排序。从文档中:

此方法不支持搜索包含负索引的数组。在调用此方法之前,必须对数组进行排序。

根据设计,它将返回负值:

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-04 01:54:36

二进制搜索在排序数组上工作。您的数组没有排序,因此您会得到预期的随机结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12714070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档