1

1 つのケースで 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" ) );
}
4

1 に答える 1

5

二分探索は、ソートされたリストのみで正しく機能します。はList<T>すでにソートされている必要があります。そうでない場合、結果は正しくありません。

于 2016-02-04T05:11:34.780 に答える