List<T>.BinarySearch 返回意外结果
List<T>.BinarySearch returning a unexpected result
在一个案例中,我从 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" ) );
}
二分搜索仅适用于排序列表。
List<T>
必须已经排序;否则,结果不正确。
在一个案例中,我从 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" ) );
}
二分搜索仅适用于排序列表。
List<T>
必须已经排序;否则,结果不正确。