BinarySearch在二维列表中

时间:2013-05-28 10:35:26

标签: c#

我有维度列表:

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类。

3 个答案:

答案 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好得多。