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.
List<string> keyList = new List<string>(this.yourDictionary.Keys);
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);
}
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.
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);
}
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.
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();
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();
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);
}
Pour un dictionnaire hybride, j'utilise ceci:
List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());