13

私は

Lookup<TKey, TElement>

ここで、TElement は単語の文字列を参照します。Lookup を次のように変換したい:

Dictionary<int ,string []> or List<List<string>> ?

の使用に関するいくつかの記事を読みました

Lookup<TKey, TElement>

しかし、それだけでは理解できませんでした。前もって感謝します。

4

2 に答える 2

20

次の方法を使用してそれを行うことができます。

いくつかの単語を含む文字列をLookup<int, string>呼び出した場合、値を aに入れ、すべてを辞書にパックできます。mylookupIGroupingstring[]

var mydict = mylookup.ToDictionary(x => x.Key, x => x.ToArray());

アップデート

あなたのコメントを読んで、私はあなたがルックアップで実際に何をしたいのかを知っています (ops の前の質問を参照してください)。それを辞書やリストに変換する必要はありません。ルックアップを直接使用するだけです:

var wordlist = " aa bb cc ccc ddd ddd aa ";
var lookup = wordlist.Trim().Split().Distinct().ToLookup(word => word.Length);

foreach (var grouping in lookup.OrderBy(x => x.Key))
{
    // grouping.Key contains the word length of the group
    Console.WriteLine("Words with length {0}:", grouping.Key);

    foreach (var word in grouping.OrderBy(x => x))
    {
        // do something with every word in the group
        Console.WriteLine(word);
    }
}

また、順序が重要な場合はIEnumerableOrderByまたはOrderByDescending拡張メソッドを使用していつでも を並べ替えることができます。

編集:

上記の編集されたコード サンプルを見てください。キーを注文する場合は、OrderByメソッドを使用してください。を使用して単語をアルファベット順に並べ替えるのと同じ方法ですgrouping.OrderBy(x => x)

于 2012-07-08T13:10:27.683 に答える
5

ルックアップは、キーから値のコレクションへのマッピングのコレクションです。キーを指定すると、関連付けられた値のコレクションを取得できます。

TKey key;
Lookup<TKey, TValue> lookup;
IEnumerable<TValue> values = lookup[key];

実装IEnumerable<IGrouping<TKey, TValue>> すると、列挙可能な拡張メソッドを使用して、目的の構造に変換できます。

Lookup<int, string> lookup = //whatever
Dictionary<int,string[]> dict = lookup.ToDictionary(grp => grp.Key, grp => grp.ToArray());
List<List<string>> lists = lookup.Select(grp => grp.ToList()).ToList();
于 2012-07-08T13:16:05.663 に答える