C#Array.BinarySearch问题

C#Array.BinarySearch问题,c#,arrays,binary-search,C#,Arrays,Binary Search,有人能解释为什么会这样吗? 即,即使在位置7的数组中存在175,array.binarysearch是否返回负值 请看这张图片: 您是否事先对阵列进行了排序BinarySearch要求对数组进行排序。否则,它可能返回不正确的结果 另外,您应该检查>=0,而不是>0。元素可以出现在索引0处。您是否事先对数组进行了排序BinarySearch要求对数组进行排序。否则,它可能返回不正确的结果 另外,您应该检查>=0,而不是>0。该元素可以存在于索引0处 确保数组已排序 确保要搜索的对象与数组中的对象类

有人能解释为什么会这样吗? 即,即使在位置7的数组中存在175,array.binarysearch是否返回负值

请看这张图片:


您是否事先对阵列进行了排序
BinarySearch
要求对数组进行排序。否则,它可能返回不正确的结果


另外,您应该检查
>=0
,而不是
>0
。元素可以出现在索引0处。

您是否事先对数组进行了排序
BinarySearch
要求对数组进行排序。否则,它可能返回不正确的结果

另外,您应该检查
>=0
,而不是
>0
。该元素可以存在于索引0处

  • 确保数组已排序
  • 确保要搜索的对象与数组中的对象类型相同。它有助于使用通用版本:

    Array.BinarySearch(..)

  • 确保数组已排序
  • 确保要搜索的对象与数组中的对象类型相同。它有助于使用通用版本:

    Array.BinarySearch(..)


  • 从图中可以看出,数组是220个元素,您只显示前7个元素。必须对所有220个元素进行排序,否则BinarySearch将失败


    例如,如果您仅使用第一个
    num
    元素,请使用图片中的
    BinarySearch(0,num,175)

    ,数组为220个元素,您仅显示前7个元素。必须对所有220个元素进行排序,否则BinarySearch将失败


    例如,如果只使用第一个
    num
    元素,请使用
    BinarySearch(0,num,175)

    如果数组已排序,则可以使用特定于类型的版本来确保输入参数正确:

     int[] array = new int[] { 1, 3, 4, 5, 175, 200, 300, 400 };
     int index = Array.BinarySearch<int>(array, 175);
    
    int[]数组=新的int[]{1,3,4,5,175200300400};
    int index=Array.BinarySearch(Array,175);
    

    如果输入数组或搜索参数不是int类型,则会出现编译错误。

    如果数组已排序,则可以使用特定于类型的版本来确保输入参数正确:

     int[] array = new int[] { 1, 3, 4, 5, 175, 200, 300, 400 };
     int index = Array.BinarySearch<int>(array, 175);
    
    int[]数组=新的int[]{1,3,4,5,175200300400};
    int index=Array.BinarySearch(Array,175);
    

    如果输入数组或搜索参数不是int类型,则会出现编译错误。

    最好发布代码的相关部分,而不是图片。最好发布代码的相关部分,而不是图片。如果我无法对其进行排序,因为这会破坏元素的正确顺序,该怎么办?假设我有一个来自DB的字符串的唯一列表。我想“按原样”遍历它并进行“模式匹配”:公共int比较(字符串源,字符串模式){if(source.StartsWith(pattern)){return 0;}返回source.CompareTo(pattern);}如果我不能对它进行排序,因为它会破坏元素的正确顺序,该怎么办?假设我有一个来自DB的字符串的唯一列表。我想“按原样”遍历它并进行“模式匹配”:公共int比较(字符串源,字符串模式){if(source.StartsWith(pattern)){return 0;}返回source.CompareTo(pattern);}