小编典典

Lookup 的意义何在?

all

MSDN 是这样解释 Lookup 的:

ALookup<TKey, TElement> 类似于Dictionary<TKey, TValue>. 不同之处在于
Dictionary 将键映射到单个值,而 Lookup 将键映射到值的集合。

我不觉得这个解释特别有用。查找用于什么?


阅读 84

收藏
2022-08-17

共1个答案

小编典典

它是一个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在普通代码中使用大多数这些声明。)

2022-08-17