列表.二进制搜索返回意外结果

本文关键字:返回 意外 结果 搜索 二进制 列表 | 更新日期: 2023-09-27 18:33:19

在单个案例中,我从List.BinarySearch得到了一个奇怪的结果。在存在"$in"的列表中搜索"$in"时,结果为 -4。下面是一个突出问题的测试用例。只有查找"$in"的情况失败。

可能是某种保留关键字吗?我已经针对.Net Framworks 3.5,4.5.2和4.6进行了编译,结果相同。

[TestMethod]
public void IssueWithBinarySearch() {
  List<string> operators = new List<string>( new[] { "$eq", "$gt", "$gte", "$lt", "$lte", "$ne", "$in", "$nin" } );
  Assert.AreEqual( 0, operators.BinarySearch( "$eq" ) );
  Assert.AreEqual( 1, operators.BinarySearch( "$gt" ) );
  Assert.AreEqual( 2, operators.BinarySearch( "$gte" ) );
  Assert.AreEqual( 3, operators.BinarySearch( "$lt" ) );
  Assert.AreEqual( 4, operators.BinarySearch( "$lte" ) );
  Assert.AreEqual( 5, operators.BinarySearch( "$ne" ) );
  Assert.AreEqual( 6, operators.BinarySearch( "$in" ) );
  Assert.AreEqual( 7, operators.BinarySearch( "$nin" ) );
}

列表<T>.二进制搜索返回意外结果

二叉搜索仅适用于排序列表。List<T>必须已排序;否则,结果不正确。