2010-10-19 19 views
64

Mam problem podczas próby konwersji słownika na listę.Konwersja słownika do kolekcji listy w C#

Przykład, jeśli mam słownik z ciągiem szablonu jako klucz i ciąg jako wartość. Następnie chcę przekonwertować klucz słownika do listy kolekcji jako ciąg.

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

Czy pytasz o listę kluczy ze słownika? Jeśli tak, istnieje właściwość Keys na słownika, która ci to daje. –

Odpowiedz

123

Aby przekonwertować klucze do listy własnych:

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

Albo można skrócić to i nawet nie przejmuj się korzystaniem z wybierz:

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

@Brian - Robiłem to w mojej edycji. Chciałem najpierw pokazać wybraną metodę, ponieważ właśnie o to pytał OP, a następnie pokazać alternatywę. :-) –

+0

Więc pomyślałem, więc usunąłem mój komentarz. –

+1

to było naprawdę pomocne. Musiałem zastosować .Where (...) do dyktatu przed zwróceniem kluczy, ale ta metoda nie zwraca słownika, więc nie mogłem uzyskać dostępu do właściwości Keys. za pomocą tego wyboru po tym, gdzie działał świetnie –

12

Jeśli chcesz używać LINQ to można użyć następującego fragmentu:

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

    listnumber.Add (item.Key); 

} 
+0

Dlaczego nie w końcu :) –

17

Alternatywnie:

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

Praca z .NET Compact Framework 2.0 (więc bez Linq) to była dla mnie najlepsza opcja. –

3

Jesli chcesz przekazać kolekcję kluczy Słownik w metodzie jednego argumentu.

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

Jeśli chcesz przekonwertować Keys:

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

innego jeśli yuo chcą konwertować wartości:

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 jest lista NumberClass-ie, gdzie na pierwszej płycie Cyfry są równe 1, Chars jest równy "First", a CharsLower równy "first"