with values net initialized initialize example c# .net dictionary key

values - Cómo modificar la clave en un diccionario en C#



initialize dictionary c# (4)

¿Cómo puedo cambiar el valor de varias teclas en un diccionario?

Tengo el siguiente diccionario:

SortedDictionary<int,SortedDictionary<string,List<string>>>

Quiero recorrer este diccionario ordenado y cambiar la tecla a la tecla + 1 si el valor de la clave es mayor que cierta cantidad.


Debe eliminar los elementos y volver a agregarlos con su nueva clave. Por MSDN :

Las claves deben ser inmutables, siempre que se utilicen como claves en SortedDictionary(TKey, TValue) .


Como dijo Jason, no puede cambiar la clave de una entrada de diccionario existente. Tendrás que eliminar / agregar usando una nueva clave como esta:

// we need to cache the keys to update since we can''t // modify the collection during enumeration var keysToUpdate = new List<int>(); foreach (var entry in dict) { if (entry.Key < MinKeyValue) { keysToUpdate.Add(entry.Key); } } foreach (int keyToUpdate in keysToUpdate) { SortedDictionary<string, List<string>> value = dict[keyToUpdate]; int newKey = keyToUpdate + 1; // increment the key until arriving at one that doesn''t already exist while (dict.ContainsKey(newKey)) { newKey++; } dict.Remove(keyToUpdate); dict.Add(newKey, value); }


Si no te molesta volver a crear el diccionario, puedes usar una declaración LINQ.

var dictionary = new SortedDictionary<int, SortedDictionary<string, List<string>>>(); var insertAt = 10; var newValues = dictionary.ToDictionary( x => x.Key < insertAt ? x.Key : x.Key + 1, x => x.Value); return new SortedDictionary<int, SortedDictionary<string, List<string>>>(newValues);

o

var dictionary = new SortedDictionary<int, SortedDictionary<string, List<string>>>(); var insertAt = 10; var newValues = dictionary.ToDictionary( x => x.Key < insertAt ? x.Key : x.Key + 1, x => x.Value); dictionary.Clear(); foreach(var item in newValues) dictionary.Add(item.Key, item.Value);


Puedes usar la declaración LINQ para ello

var maxValue = 10 sd= sd.ToDictionary(d => d.key > maxValue ? d.key : d.Key +1, d=> d.Value);