Nunca obtuve ningún código. Intenté trabajar.¿Cómo obtengo la lista de claves en un diccionario?
Quiero las claves y no los valores (todavía). Usar otra matriz demostró ser demasiado trabajo ya que también uso quitar.
Nunca obtuve ningún código. Intenté trabajar.¿Cómo obtengo la lista de claves en un diccionario?
Quiero las claves y no los valores (todavía). Usar otra matriz demostró ser demasiado trabajo ya que también uso quitar.
List<string> keyList = new List<string>(this.yourDictionary.Keys);
Usted debe ser capaz de tan sólo mirar a .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);
}
¿Y qué pasa si está eliminando claves en el bucle? –
@MartinCapodici, entonces normalmente debería esperar que el iterador se rompa y se niegue a continuar –
Marc, sí, entonces en ese caso haría algo como la otra respuesta y crearía una nueva lista. –
la respuesta de Marc Gravell debe trabajar para usted. myDictionary.Keys
devuelve un objeto que implementa ICollection<TKey>
, IEnumerable<TKey>
y sus homólogos no genéricos.
Sólo quería añadir que si usted planea acceder al valor, así, usted podría navegar por el diccionario como esto (ejemplo modificado):
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 pregunta es un poco difícil de entender, pero me Supongo que el problema es que estás tratando de eliminar elementos del Diccionario mientras iteras sobre las teclas. Creo que en ese caso no tienes más remedio que usar una segunda matriz.
ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
if (<your condition here>)
{
lDict.Remove(lKey);
}
}
Si puede usar listas genéricas y diccionarios en lugar de un ArrayList entonces yo, sin embargo, lo anterior sólo debería trabajar.
O así:
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);
}
¿esto crea una copia de las claves? (para que pueda enumerar con seguridad) – mcmillab
creo que la manera más ordenada es utilizar LINQ:
Dictionary<string, int> data = new Dictionary<string, int>();
data.Select(x=>x.Key).ToList();
Esto podría ser una forma "ordenada" pero también es una forma muy costosa. Primero, mientras que los datos.Las claves serían O (1) operación y realmente no asignarían nada, su solución sería O (N) y asignaría una nueva colección (lista) con todas las claves. Entonces, por favor, no hagas esto. –
Para obtener la lista de todas las claves
List<String> myKeys = myDict.Keys.ToList();
No olvide: 'using System.Linq;' Necesito saber qué respuestas ignorar. Lo siento :) – Bitterblue
Gracias @Bitterblue. No podía entender por qué '.ToList()' estaba arrojando un error cuando lo había usado tantas otras veces, así que vine a buscar una respuesta y me di cuenta de que el archivo en el que estaba trabajando no tenía 'using System .Linq' :) – Drew
no funciona: 'Dictionary
Para un dic híbrido cionario, yo uso esto:
List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());
menudo he utilizado esto para obtener la clave y el valor dentro de un diccionario: (VB.Net)
For Each kv As KeyValuePair(Of String, Integer) In layerList
Next
(layerList es de tipo diccionario (de cadena, entero))
No puedo creer todas estas respuestas intrincadas. Asumiendo que la clave es de tipo: cadena (o use 'var' si usted es un desarrollador flojo): -
List<string> listOfKeys = theCollection.Keys.ToList();
es necesario usar "esto". – JerryGoyal
@JerryGoyal No, no es necesario. Simplemente se usa para aclarar la confusión acerca de si 'yourDictionary' es parte del objeto, se deriva en la función o el nombre es un parámetro. – bcdan