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(??????);

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();

@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);

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();

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();

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


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
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.