信息
您所需的主题如下所示。但此主题未包含在此库中。

Enumerable.ToLookup<TSource, TKey, TElement> 方法 (IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)

2013/12/13

根据指定的键选择器和元素选择器函数,从 IEnumerable<T> 创建一个 Lookup<TKey, TElement>

Namespace:  System.Linq
程序集:  System.Core(位于 System.Core.dll 中)

public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	Func<TSource, TElement> elementSelector
)

类型参数

TSource

source 中的元素的类型。

TKey

keySelector 返回的键的类型。

TElement

elementSelector 返回的值的类型。

参数

source
类型: System.Collections.Generic.IEnumerable<TSource>
要从其创建 Lookup<TKey, TElement>IEnumerable<T>
keySelector
类型: System.Func<TSource, TKey>
用于从每个元素中提取键的函数。
elementSelector
类型: System.Func<TSource, TElement>
用于从每个元素产生结果元素值的转换函数。

返回值

类型: System.Linq.ILookup<TKey, TElement>
一个 Lookup<TKey, TElement>,包含从输入序列中选择的类型为 TElement 的值。

用法说明

在 Visual Basic 和 C# 中,您可以对类型为 IEnumerable<TSource> 的任何对象调用此方法作为实例方法。使用实例方法语法来调用此方法时,忽略第一个参数。

异常条件
ArgumentNullException

sourcekeySelectorelementSelectornull

ToLookup<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) 方法返回一个 Lookup<TKey, TElement> 和一个将键映射为值集合的一对多字典。 Lookup<TKey, TElement>Dictionary<TKey, TValue> 不同,后者执行键到单个值的一对一映射。

使用默认的相等比较器 Default 对键进行比较。

下面的代码示例演示如何通过使用键选择器函数和元素选择器函数用 ToLookup<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) 创建 Lookup<TKey, TElement>


      class Package
      {
         public string Company { get; set; }
         public double Weight { get; set; }
         public long TrackingNumber { get; set; }
      }

      public static void ToLookupEx1()
      {
         // Create a list of Packages.
         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 
         // as the element values of the Lookup.
         ILookup<char, string> lookup =
             packages
             .ToLookup(p => Convert.ToChar(p.Company.Substring(0, 1)),
                       p => p.Company + " " + p.TrackingNumber);

         // Iterate through each IGrouping in the Lookup.
         foreach (IGrouping<char, string> packageGroup in lookup)
         {
            // Print the key value of the IGrouping.
            outputBlock.Text += packageGroup.Key + "\n";
            // Iterate through each value in the 
            // IGrouping and print its value.
            foreach (string str in packageGroup)
               outputBlock.Text += String.Format("    {0}", str) + "\n";
         }
      }

      /*
       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
      */



Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: