zoukankan      html  css  js  c++  java
  • C# Lookup和ToLookup方法的浅析

    读书笔记 C# Lookup<TKey,TElement>和ToLookup方法的浅析

    Lookup<TKey,TElement>类型对象和分组是一样的,就好比使用Linq的group关键字后所查询出来的结果,使用foreach的时候,都可以用IGrouping<TKey,TElement>来迭代它们。Lookup<TKey,TElement>也是一种字典,不过它是一对多,不像Dictionary<TKey,TElement>一样是一对一的。Lookup<int,int>和Dictionary<int,List<int>>是一样的。

    Lookup<TKey,TElement>的对象可以存储ToLookup方法的结果。代码如下:

    class Package
    {
        public string Company;
        public double Weight;
        public long TrackingNumber;
    }
    
    public static void LookupExample()
    {
        // Create a list of Packages to put into a Lookup data structure.
        List<Package> packages = new List<Package> { new Package { Company = "Coho Vineyard", Weight = 25.2, TrackingNumber = 89453312L },
                                                     new Package { Company = "Lucerne Publishing", Weight = 18.7, TrackingNumber = 89112755L },
                                                     new Package { Company = "Wingtip Toys", Weight = 6.0, TrackingNumber = 299456122L },
                                                     new Package { Company = "Contoso Pharmaceuticals", Weight = 9.3, TrackingNumber = 670053128L },
                                                     new Package { Company = "Wide World Importers", Weight = 33.8, TrackingNumber = 4665518773L } };
    
        // Create a Lookup to organize the packages. Use the first character of Company as the key value.
        // Select Company appended to TrackingNumber for each element value in the Lookup.
        Lookup<char, string> lookup = (Lookup<char, string>)packages.ToLookup(p => Convert.ToChar(p.Company.Substring(0, 1)),
                                                        p => p.Company + " " + p.TrackingNumber);
    
        // Iterate through each IGrouping in the Lookup and output the contents.
        foreach (IGrouping<char, string> packageGroup in lookup)
        {
            // Print the key value of the IGrouping.
            Console.WriteLine(packageGroup.Key);
            // Iterate through each value in the IGrouping and print its value.
            foreach (string str in packageGroup)
                Console.WriteLine("    {0}", str);
        }
    
        // This code produces the following output:
        //
        // C
        //     Coho Vineyard 89453312
        //     Contoso Pharmaceuticals 670053128
        // L
        //     Lucerne Publishing 89112755
        // W
        //     Wingtip Toys 299456122
        //     Wide World Importers 4665518773
    
        // Get the number of key-collection pairs in the Lookup.
        int count = lookup.Count;
    
        // Select a collection of Packages by indexing directly into the Lookup.
        IEnumerable<string> cgroup = lookup['C'];
    
        // Output the results.
        Console.WriteLine("\nPackages that have a key of 'C':");
        foreach (string str in cgroup)
            Console.WriteLine(str);
    
        // This code produces the following output:
        //
        // Packages that have a key of 'C'
        // Coho Vineyard 89453312
        // Contoso Pharmaceuticals 670053128
    
        // Determine if there is a key with the value 'G' in the Lookup.
        bool hasG = lookup.Contains('G');

    复制代码

  • 相关阅读:
    Intellij IDEA + Jrebel
    WebConfig配置详解大全
    .Net 获取前端传递的数据
    js 格式验证大全
    EasyUI DataGrid 时间格式化、字符串长度截取
    SQL取某个字符串最后一次出现的位置后面的字符串方法
    公民身份号码校验码算法(C#版)
    组织机构代码校验码生成算法(C#版)
    MySQL实现根据当前ID读取上一条和下一条记录
    js jquery.pagination.js分页
  • 原文地址:https://www.cnblogs.com/grj001/p/12225098.html
Copyright © 2011-2022 走看看