查找<TKey,TElement>有什么意义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

MSDN像这样解释了查找:

ALookup<TKey, TElement>resembles aDictionary<TKey, TValue>. The difference is that aDictionary<TKey, TValue>maps keys to single values, whereas aLookup<TKey, TElement>maps keys to collections of values.

查找是用来做什么的?

提问于
用户回答回答于

这是一个介于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)对于大多数这些声明,在正常代码中。)

用户回答回答于

思考这个问题的一种方法是:Lookup<TKey, TElement>类似于Dictionary<TKey, Collection<TElement>>基本上,可以通过相同的键返回零或多个元素的列表。

namespace LookupSample
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    class Program
    {
        static void Main(string[] args)
        {
            List<string> names = new List<string>();
            names.Add("Smith");
            names.Add("Stevenson");
            names.Add("Jones");

            ILookup<char, string> namesByInitial = names.ToLookup((n) => n[0]);

            // count the names
            Console.WriteLine("J's: {0}", namesByInitial['J'].Count());
            Console.WriteLine("S's: {0}", namesByInitial['S'].Count());
            Console.WriteLine("Z's: {0}", namesByInitial['Z'].Count());
        }
    }
}

所属标签

可能回答问题的人

  • 找虫虫

    0 粉丝0 提问6 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问5 回答
  • 优惠活动秘书

    0 粉丝2 提问5 回答
  • 爸爸

    腾讯 · 客户端安全 (已认证)

    4 粉丝4 提问5 回答

扫码关注云+社区

领取腾讯云代金券