Actualización: noviembre 2007
Representa una colección de claves asignadas a uno o varios valores.
Espacio de nombres:
System.Linq
Ensamblado:
System.Core (en System.Core.dll)
Visual Basic (Declaración)
Public Class Lookup(Of TKey, TElement) _
Implements ILookup(Of TKey, TElement), IEnumerable(Of IGrouping(Of TKey, TElement)), _
IEnumerable
Dim instance As Lookup(Of TKey, TElement)
public class Lookup<TKey, TElement> : ILookup<TKey, TElement>,
IEnumerable<IGrouping<TKey, TElement>>, IEnumerable
generic<typename TKey, typename TElement>
public ref class Lookup : ILookup<TKey, TElement>,
IEnumerable<IGrouping<TKey, TElement>^>, IEnumerable
J# admite el uso de APIs genéricas pero no admite la declaración de nuevas API.
JScript no admite el uso de métodos ni tipos genéricos.
Parámetros de tipo
- TKey
Tipo de las claves de Lookup<(Of <(TKey, TElement>)>).
- TElement
Tipo de los elementos de cada valor IEnumerable<(Of <(T>)>) en Lookup<(Of <(TKey, TElement>)>).
Lookup<(Of <(TKey, TElement>)>) se parece a Dictionary<(Of <(TKey, TValue>)>). La diferencia reside en que Dictionary<(Of <(TKey, TValue>)>) asigna las claves a valores únicos, mientras que Lookup<(Of <(TKey, TElement>)>) las asigna a colecciones de valores.
Puede crear una instancia de Lookup<(Of <(TKey, TElement>)>) llamando a ToLookup en un objeto que implementa IEnumerable<(Of <(T>)>).
Nota: |
|---|
No hay ningún constructor público para crear una nueva instancia de Lookup<(Of <(TKey, TElement>)>). Además, los objetos Lookup<(Of <(TKey, TElement>)>) son inmutables, es decir, no se puede agregar ni quitar elementos o claves de un objeto Lookup<(Of <(TKey, TElement>)>) después de su creación. |
En el ejemplo siguiente se crea un objeto Lookup<(Of <(TKey, TElement>)>) a partir de una colección de objetos. A continuación, se enumera el objeto Lookup<(Of <(TKey, TElement>)>) y se generan todas las claves y todos los valores en la colección de valores asociada de la clave. Se muestra asimismo cómo usar las propiedades Count e Item y los métodos Contains y GetEnumerator.
Structure Package
Public Company As String
Public Weight As Double
Public TrackingNumber As Long
End Structure
Sub LookupExample()
' Create a list of Packages to put into a Lookup data structure.
Dim packages As New System.Collections.Generic.List(Of Package)(New Package() _
{New Package With {.Company = "Coho Vineyard", .Weight = 25.2, .TrackingNumber = 89453312L}, _
New Package With {.Company = "Lucerne Publishing", .Weight = 18.7, .TrackingNumber = 89112755L}, _
New Package With {.Company = "Wingtip Toys", .Weight = 6.0, .TrackingNumber = 299456122L}, _
New Package With {.Company = "Contoso Pharmaceuticals", .Weight = 9.3, .TrackingNumber = 670053128L}, _
New Package With {.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.
Dim lookup As ILookup(Of Char, String) = _
packages.ToLookup(Function(ByVal p) Convert.ToChar(p.Company.Substring(0, 1)), _
Function(ByVal p) p.Company & " " & p.TrackingNumber)
Dim output As New System.Text.StringBuilder
' Iterate through each IGrouping in the Lookup and output the contents.
For Each packageGroup As IGrouping(Of Char, String) In lookup
' Print the key value of the IGrouping.
output.AppendLine(packageGroup.Key)
' Iterate through each value in the IGrouping and print its value.
For Each str As String In packageGroup
output.AppendLine(String.Format(" {0}", str))
Next
Next
' Display the output.
MsgBox(output.ToString())
' 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.
Dim count As Integer = lookup.Count
' Select a collection of Packages by indexing directly into the Lookup.
Dim cgroup As System.Collections.Generic.IEnumerable(Of String) = lookup("C"c)
output = New System.Text.StringBuilder
' Output the results.
output.AppendLine(vbCrLf & "Packages that have a key of 'C':")
For Each str As String In cgroup
output.AppendLine(str)
Next
' Display the output.
MsgBox(output.ToString())
' 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.
Dim hasG As Boolean = lookup.Contains("G"c)
End Sub
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');
}
System..::.Object
System.Linq..::.Lookup<(Of <(TKey, TElement>)>)
Seguridad para subprocesos
Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Windows Vista, Windows XP SP2, Windows Server 2003, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
.NET Framework
Compatible con: 3.5
.NET Compact Framework
Compatible con: 3.5
Referencia