5

私は次元リストを持っています:

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);

ただし、1 次元リストに対してのみ機能します。私の場合、2次元リストで機能するように拡張するにはどうすればよいですか? Dictionaryクラスは使いたくない。

4

3 に答える 3

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());
于 2013-05-28T10:42:16.077 に答える
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>>して関数に渡すことができます。

于 2013-05-28T10:43:54.460 に答える
-1

常にリストの最初の項目を使用して検索するため、辞書も使用できます。

    var d = Dictionary<string, List<string>>();

以前に回答したように、リストよりもはるかに優れたプリフォームです。

于 2013-05-28T10:53:17.793 に答える