web-dev-qa-db-fra.com

Comment puis-je obtenir la liste des clés dans un dictionnaire?

Je n'ai jamais eu aucun code que j'ai essayé de travailler.

Je veux les clés et pas les valeurs (pour le moment). Utiliser un autre tableau s’est avéré être trop de travail car j’utilise aussi remove.

140
Athiwat Chunlakhan
List<string> keyList = new List<string>(this.yourDictionary.Keys);
279
Camal

Vous devriez pouvoir simplement regarder .Keys:

    Dictionary<string, int> data = new Dictionary<string, int>();
    data.Add("abc", 123);
    data.Add("def", 456);
    foreach (string key in data.Keys)
    {
        Console.WriteLine(key);
    }
67
Marc Gravell

Pour obtenir la liste de toutes les clés

using System.Linq;
List<String> myKeys = myDict.Keys.ToList();

System.Linq est pris en charge dans .Net Framework 3.5 ou version ultérieure. Consultez les liens ci-dessous si vous rencontrez des problèmes lors de l'utilisation de System.Linq.

Visual Studio ne reconnaît pas System.Linq

Espace de noms System.Linq

38
prem

La réponse de Marc Gravell devrait fonctionner pour vous. myDictionary.Keys renvoie un objet qui implémente ICollection<TKey>, IEnumerable<TKey> et leurs équivalents non génériques.

Je voulais simplement ajouter que si vous envisagez d'accéder à la valeur également, vous pouvez parcourir le dictionnaire de la manière suivante (exemple modifié):

Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);

foreach (KeyValuePair<string, int> item in data)
{
    Console.WriteLine(item.Key + ": " + item.Value);
}
12
Thorarin

La question est un peu délicate à comprendre, mais je suppose que le problème est que vous essayez de supprimer des éléments du dictionnaire tout en itérant sur les clés. Je pense que dans ce cas, vous n'avez pas d'autre choix que d'utiliser un second tableau.

ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
  if (<your condition here>)
  {
    lDict.Remove(lKey);
  }
}

Si vous pouvez utiliser des listes génériques et des dictionnaires à la place d'un ArrayList, alors je le ferais, mais ce qui précède devrait fonctionner.

3
Dan

Je ne peux pas croire toutes ces réponses compliquées. En supposant que la clé soit de type: string (ou utilisez 'var' si vous êtes un développeur paresseux): -

List<string> listOfKeys = theCollection.Keys.ToList();
2
Antony Booth

Je pense que le moyen le plus simple est d'utiliser LINQ :

Dictionary<string, int> data = new Dictionary<string, int>();data.Select(x=>x.Key).ToList();

1
JakubW

Ou comme ceci:

List< KeyValuePair< string, int > > theList =
    new List< KeyValuePair< string,int > >(this.yourDictionary);

for ( int i = 0; i < theList.Count; i++)
{ 
  // the key
  Console.WriteLine(theList[i].Key);
}
0
user176829

Pour un dictionnaire hybride, j'utilise ceci:

List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());
0
Kosmas