2010-10-19 16 views
64

Tengo un problema al intentar convertir el diccionario a una lista.Convertir diccionario en una colección de listas en C#

Ejemplo si tengo diccionario con cadena de plantilla como clave y cadena como valor. Luego deseo convertir la clave del diccionario para mostrar la colección como una cadena.

Dictionary<string, string> dicNumber = new Dictionary<string, string>(); 
List<string> listNumber = new List<string>(); 

dicNumber.Add("1", "First"); 
dicNumber.Add("2", "Second"); 
dicNumber.Add("3", "Third"); 

// So the code may something look like this 
//listNumber = dicNumber.Select(??????); 
+5

¿Está pidiendo una lista de claves del diccionario? Si es así, hay una Propiedad de Llaves en el Diccionario que te dará eso. –

Respuesta

123

Para convertir las claves para una lista de los suyos:

listNumber = dicNumber.Select(kvp => kvp.Key).ToList(); 

O puede acortar y ni siquiera molestarse con el uso de seleccionar:

listNumber = dicNumber.Keys.ToList(); 
+0

@Brian - Estaba llegando en mi edición. Quería mostrar el método de selección primero, ya que eso era lo que el OP preguntaba y luego mostraba la alternativa. :-) –

+0

Así que pensé, así que eliminé mi comentario. –

+1

esto fue realmente útil. Necesitaba aplicar .Donde (...) a la dicción antes de devolver las claves, pero ese método no devuelve un diccionario, por lo que no pude acceder a la propiedad Llaves. usando esto seleccione después de donde funcionó bien –

12

Si desea utilizar LINQ, puede utilizar el siguiente fragmento:

var listNumber = dicNumber.Keys.ToList(); 
4
foreach (var item in dicNumber) 
{ 

    listnumber.Add (item.Key); 

} 
+0

¿Por qué no al final :) –

17

alternativa:

var keys = new List<string>(dicNumber.Keys); 
+1

Trabajando con .NET Compact Framework 2.0 (entonces no Linq) esta fue la mejor opción para mí. –

3

Si quieres pasar la colección claves de los diccionarios en un argumento de un método.

List<string> lstKeys = Dict.Keys; 
Methodname(lstKeys); 
------------------- 
void MethodName(List<String> lstkeys) 
{ 
    `enter code here` 
    //Do ur task 
} 
3

Si desea convertir Claves:

List<string> listNumber = dicNumber.Keys.ToList(); 

más si yuo quieren convertir Valores:

List<string> listNumber = dicNumber.Values.ToList(); 
-1
class NumberClass { 
    int Digits { get; set; } 
    string Chars { get; set; } 
    string CharsLower { get; set; } 
} 

var dicNumber = new Dictionary<string, string> { 
    {"1", "First"}, 
    {"2", "Second"}, 
    {"3", "Third"} 
} 

var listNumber = dicNumber.Select(number => new NumberClass { 
    Digits = Convert.ToInt32(number.Key), 
    Chars = number.Value, 
    CharsLower = number.Value.ToLower() 
}).ToList(); 

listNumber es una lista de NumberClass-es donde por primera grabación Los dígitos equivalen a 1, Chars equivale a "First" y CharsLower equivale a "first"

Cuestiones relacionadas