2010-10-19 11 views
64

Ho un problema quando provo a convertire il dizionario in elenco.Converti dizionario nella raccolta di elenchi in C#

Esempio se ho un dizionario con stringa di modello come chiave e stringa come valore. Quindi desidero convertire la chiave del dizionario in elenco come stringa.

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

Stai chiedendo un elenco di chiavi dal dizionario? Se è così, c'è una proprietà Keys sul dizionario che ti darà questo. –

risposta

123

Per convertire le chiavi di un elenco dei loro propri:

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

Oppure si può ridurre in alto e non si preoccupa nemmeno di usare select:

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

@Brian - Stavo arrivando nella mia modifica. Volevo mostrare il metodo di selezione per primo poiché era quello che l'OP chiedeva e quindi mostrare l'alternativa. :-) –

+0

Quindi ho capito, quindi ho rimosso il mio commento. –

+1

questo è stato davvero utile. Dovevo applicare .Where (...) al dict prima di restituire le chiavi, ma quel metodo non restituisce un dizionario, quindi non ho potuto accedere alla proprietà Keys. usando questa selezione dopo il punto in cui funzionava alla grande –

12

Se si desidera utilizzare Linq quindi è possibile utilizzare il seguente frammento:

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

    listnumber.Add (item.Key); 

} 
+0

Perché non alla fine :) –

17

alternativa:

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

Lavorando con .NET Compact Framework 2.0 (quindi senza Linq) questa era l'opzione migliore per me. –

3

Se u vuole passare alla raccolta chiavi dei dizionari in un unico argomento del metodo.

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

Se si desidera convertire i Tasti:

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

altrimenti se yuo vogliono convertire Valori:

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 è un elenco di NumberClass-es dove per primo disco Le cifre equivalgono a 1, Chars equivale a "Primo" e CharsLower equivale a "primo"

Problemi correlati