1. ホーム
  2. c#

[解決済み] Lookup<TKey, TElement>のポイントは何ですか?

2022-04-23 12:35:24

質問

MSDNでは、Lookupについてこのように説明しています。

<ブロッククオート

A Lookup<TKey, TElement> に似ている。 Dictionary<TKey, TValue> . という違いがあります。 辞書<TKey, TValue> はキーを単一の値にマッピングするのに対し ルックアップ<TKey, TElement> は、キーを値のコレクションにマッピングします。

その説明は特に役に立ちませんね。ルックアップは何に使うのでしょうか?

どのように解決するのですか?

を掛け合わせたものです。 IGrouping と辞書があります。キーによってアイテムをグループ化し、そのキーを使って効率的にアクセスすることができます (すべてのアイテムを繰り返し処理するのではなく、これは GroupBy を使用することができます)。

たとえば、.NETの型をロードして、名前空間によるルックアップを構築し、特定の名前空間のすべての型を非常に簡単に取得することができます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;

public class Test
{
    static void Main()
    {
        // Just types covering some different assemblies
        Type[] sampleTypes = new[] { typeof(List<>), typeof(string), 
                                     typeof(Enumerable), typeof(XmlReader) };

        // All the types in those assemblies
        IEnumerable<Type> allTypes = sampleTypes.Select(t => t.Assembly)
                                               .SelectMany(a => a.GetTypes());

        // Grouped by namespace, but indexable
        ILookup<string, Type> lookup = allTypes.ToLookup(t => t.Namespace);

        foreach (Type type in lookup["System"])
        {
            Console.WriteLine("{0}: {1}", 
                              type.FullName, type.Assembly.GetName().Name);
        }
    }
}

(通常なら var は、通常のコードでは、これらの宣言のほとんどに使用されます)。