二進制搜索返回錯誤的值,即使列表已排序。這裏是清單:列表<T>二進制搜索返回錯誤值
1707 ABCD
1707 XXXX
1725 DEFG
1725 HIJK
1725 LMNOP
我從預先排序按時間(第一列)的文件這個名單,所以我沒有在我的代碼進行排序這一點。當我在1725 DEFG上進行二分搜索時,它會在按位補碼前返回給我1725 LMNOP。如果我做了一個按位補碼,結果將是1725 HIJK。
這是爲什麼?
這裏的實現:
public class RecComparer: IComparer<MyData>
{
public int Compare(MyData x, MyData y)
{
if (x.DateDetails == null)
{
if (y.DateDetails == null)
{
return 0;
}
else
{
return -1;
}
}
else
{
if (y.DateDetails == null)
{
return 1;
}
else
{
int retval = x.DateDetails.Length.CompareTo(y.DateDetails.Length);
if (retval != 0)
{
return retval;
}
else
{
return x.DateDetails.CompareTo(y.DateDetails);
}
}
}
}
}
這裏的調用二分查找:
lookAhead = recordList.BinarySearch(lookAheadtime, (IComparer<MyData>)rc);
任何理由就是爲什麼它的行爲的方式。
編輯:
public class MyData
{
public string DateDetails { get; set; }
public string TrackDetails { get; set; }
}
我不認爲二進制搜索與非唯一密鑰一起工作 –
那麼實現這一點的最佳方式是什麼。 – user726720
@DarrenKopp:如果是這種情況,我還應該包括列表的第二列,而不是僅僅搜索第一列。 – user726720