Convertir le dictionnaire en collection de listes en C #

93

J'ai un problème en essayant de convertir un dictionnaire en liste.

Exemple si j'ai un dictionnaire avec une chaîne de modèle comme clé et une chaîne comme valeur. Ensuite, je souhaite convertir la clé du dictionnaire en liste de collection sous forme de chaîne.

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
la source
5
Demandez-vous une liste de clés du dictionnaire? Si c'est le cas, il existe une propriété Keys sur le dictionnaire qui vous le donnera.
Brian Rasmussen

Réponses:

175

Pour convertir les clés en leur propre liste:

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

Ou vous pouvez le raccourcir et même pas la peine d'utiliser select:

listNumber = dicNumber.Keys.ToList();
Justin Niessner
la source
@Brian - J'y arrivais dans mon montage. Je voulais d'abord montrer la méthode de sélection car c'était ce que l'OP demandait, puis montrer l'alternative. :-)
Justin Niessner
Alors j'ai pensé, alors j'ai supprimé mon commentaire.
Brian Rasmussen
1
c'était vraiment utile. J'avais besoin d'appliquer .Where (...) au dict avant de renvoyer les clés, mais cette méthode ne renvoie pas de dictionnaire, donc je n'ai pas pu accéder à la propriété Keys. en utilisant cette sélection après où a bien fonctionné
Martín Coll
22

Alternativement:

var keys = new List<string>(dicNumber.Keys);
stuartd
la source
4
Travailler avec le .NET Compact Framework 2.0 (donc pas de Linq) c'était la meilleure option pour moi.
Michael Murphy
Si vous ne pouvez pas utiliser LINQ, cette option semble la meilleure.
user2000950
17

Si vous souhaitez utiliser Linq, vous pouvez utiliser l'extrait de code suivant:

var listNumber = dicNumber.Keys.ToList();
Pop Catalin
la source
9

Si vous voulez convertir des clés:

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

sinon si vous voulez convertir des valeurs:

List<string> listNumber = dicNumber.Values.ToList();
daniele3004
la source
Cela fonctionnera, mais peut ne pas être dans l'ordre que vous attendez, même le dict a été commandé par clés auparavant, dict.Values ​​n'est pas ...
BooNonMooN
4
foreach (var item in dicNumber)
{
    listnumber.Add(item.Key);
}
explorateur
la source
Pourquoi pas à la fin :)
Arman McHitarian
3

Si vous souhaitez passer la collection de clés Dictionary en un argument de méthode.

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