以下是存儲在我的數組列表中的數據的格式。ArrayList搜索.net
A-Amsterdam
B- Brussels
C-Canada
如此等等。 我想通過只傳遞前幾個字符來搜索我的數組列表,直到' - ' 因此,如果我有類似AA-Test的東西,那麼我想通過'AA'來檢查它是否存在。
我知道我可以使用contains或binarysearch,但它不能滿足我的目的,因爲它們都比較對象。
任何建議? 感謝
以下是存儲在我的數組列表中的數據的格式。ArrayList搜索.net
A-Amsterdam
B- Brussels
C-Canada
如此等等。 我想通過只傳遞前幾個字符來搜索我的數組列表,直到' - ' 因此,如果我有類似AA-Test的東西,那麼我想通過'AA'來檢查它是否存在。
我知道我可以使用contains或binarysearch,但它不能滿足我的目的,因爲它們都比較對象。
任何建議? 感謝
您可以通過創建自己的IComparer並將它傳遞到二分查找解決這個問題:
public class StartsWithComparer : IComparer
{
public int Compare(Object x, Object y)
{
String left = x as String;
String right = y as String;
if (ReferenceEquals(left, right))
{
return 0;
}
if (ReferenceEquals(left, null))
{
return -1;
}
if (ReferenceEquals(right, null))
{
return 1;
}
return (x.StartsWith(y) || y.StartsWith(x)) ? 0 : x.CompareTo(y);
}
}
後來......
myArrayList.Sort()
myArrayList.BinarySearch("AA", new StartsWithComparer());
你可能要考慮的大小arraylist以及您將要執行的查找次數:
如果您的數據集中有大量元素(大數組列表)或大數的搜索算法,您需要使用搜索算法,如二進制搜索
如果數據足夠大,您可以考慮將數據存儲在您希望通過前幾個字符索引的散列表中( 'AA'在你的例子中)。
最後,對於小的數組列表大小和大量的查找,您可能會發現使用相同的比較器函數和線性搜索實際上表現更好。這已在此進一步討論:At which n does binary search become faster than linear search on a modern CPU?