Konwertuj słownik na kolekcję list w języku C #

93

Mam problem podczas próby konwersji słownika na listę.

Przykład, jeśli mam słownik z ciągiem szablonów jako kluczem i ciągiem jako wartością. Następnie chcę przekonwertować klucz słownika na zbiór listy 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(??????);
Edy Cu
źródło
5
Pytasz o listę kluczy ze słownika? Jeśli tak, istnieje właściwość Keys w słowniku, która to zapewni.
Brian Rasmussen

Odpowiedzi:

177

Aby przekonwertować klucze na własną listę:

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

Lub możesz go skrócić i nawet nie zawracać sobie głowy wyborem:

listNumber = dicNumber.Keys.ToList();
Justin Niessner
źródło
@Brian - docierałem do celu w mojej edycji. Chciałem najpierw pokazać metodę wyboru, ponieważ o to pytał OP, a następnie pokazać alternatywę. :-)
Justin Niessner
Więc pomyślałem, więc usunąłem swój komentarz.
Brian Rasmussen
1
to było naprawdę pomocne. Musiałem zastosować .Where (...) do dict 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. używając tego wyboru po tym, gdzie działało świetnie
Martín Coll
23

Alternatywnie:

var keys = new List<string>(dicNumber.Keys);
stuartd
źródło
4
Praca z .NET Compact Framework 2.0 (więc nie Linq) była dla mnie najlepszą opcją.
Michael Murphy
Jeśli nie możesz użyć LINQ, ta opcja wydaje się najlepsza.
user2000950
17

Jeśli chcesz korzystać z Linq, możesz użyć następującego fragmentu kodu:

var listNumber = dicNumber.Keys.ToList();
Pop Catalin
źródło
9

Jeśli chcesz przekonwertować klucze:

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

inaczej, jeśli chcesz przekonwertować wartości:

List<string> listNumber = dicNumber.Values.ToList();
daniele3004
źródło
To zadziała, ale może nie być w oczekiwanej kolejności, nawet dykt został zamówiony wcześniej przez klucze, dict. Wartości nie są ...
BooNonMooN
4
foreach (var item in dicNumber)
{
    listnumber.Add(item.Key);
}
poszukiwacz
źródło
Dlaczego nie w końcu :)
Arman McHitarian
3

Jeśli chcesz przekazać kolekcję kluczy Dictionary do jednego argumentu metody.

List<string> lstKeys = Dict.Keys;
Methodname(lstKeys);
-------------------
void MethodName(List<String> lstkeys)
{
    `enter code here`
    //Do ur task
}
bieg
źródło