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

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

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

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

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

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


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
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.