2016-02-04 71 views
1

我在List.BinarySearch中得到了一個奇怪的結果。 在存在「$ in」的列表中搜索「$ in」時,結果爲-4。 下面是一個突出顯示問題的測試案例。只有尋找「$ in」的情況失敗。列表<T> .BinarySearch返回意外結果

它可能是某種保留的關鍵字? 我已經針對.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")); 
} 

回答

5

二進制搜索僅適用於排序列表。 List<T>必須已排序;否則,結果不正確。

+1

謝謝,我再次檢查了文檔:列表必須已經根據比較器實現進行排序;否則,結果不正確。 –