我有维度列表:
List<List<string>> index_en_bg = new List<List<string>>();
index_en_bg.Add(new List<string>() { word1, translation1 });
index_en_bg.Add(new List<string>() { word2, translation2 });
index_en_bg.Add(new List<string>() { word3, translation3 });
我会通过第一列(单词)进行二分查找,如下所示:
int row = index_en_bg.BinarySearch(searchingstr);
但它仅适用于一维列表。在我的案例中,我如何将其扩展到二维列表?我不想使用Dictionary
类。
答案 0 :(得分:7)
在这种情况下,您需要提供自己的客户IComparer实施比较器
public class Comparer: IComparer<IList<string>>
{
public int Compare(IList<string> x, IList<string> y)
{
// base the comparison result on the first element in the respective lists
// eg basically
return x[0].CompareTo(y[0]);
}
你会这样称呼它,提供一个列表,其中只填写你正在搜索的字段。
int row = index_en_bg.BinarySearch(new List<string>() {searchingstr},new Comparer());
答案 1 :(得分:2)
据我了解,您应该使用Dictionary<K,V>
,这样:
// 1 creating the dictionary
var dic = new Dictionary<string, string>();
dic["word1"] = "translation1";
dic["word2"] = "translation2";
dic["word3"] = "translation3";
// 2 finding a translation
var trans = dic["word1"];
并且Dictionary<K,V>
确实非常高效。
但如果您坚持使用BinarySearch
,则可以实施IComparer<List<string>>
并将其传递给该功能。
答案 2 :(得分:-1)
由于您总是使用列表的第一项搜索,因此您也可以使用字典。
var d = Dictionary<string, List<string>>();
如前所述,它的预制件比List好得多。