c# - Cómo agregar claves duplicadas en el Diccionario
string dictionary (4)
Tengo algunas líneas de archivos de texto que quiero agregar al Diccionario. Estoy usando el Diccionario por primera vez. Mientras sumaba las líneas de inicio, estaba bien, pero de repente recibí un error:
Ya se ha añadido un elemento con la misma clave.
Aquí en mi código hay claves duplicadas que no puedo cambiar. Aquí está mi código en c #
Dictionary<string, string> previousLines = new Dictionary<string, string> { };
previousLines.Add(dialedno, line);
Aquí dialedno es la clave y la línea es la línea de archivo de texto. Aquí está el código desde el cual estoy recuperando la línea dada en función de la clave.
string tansferOrginExt = previousLines[dialedno];
Por lo tanto, mi preocupación es cómo permitir agregar claves duplicadas en el Diccionario si es posible y, si no, cómo puedo obtener una funcionalidad similar.
Cómo permitir agregar claves duplicadas en el Diccionario.
No es posible. Todas las llaves deben ser únicas. Como Dictionary<TKey, TValue>
implementado:
Cada clave en un
Dictionary<TKey, TValue>
debe ser única de acuerdo con el comparador de igualdad del diccionario.
Posibles soluciones: puede mantener la colección de cadenas como valor (es decir, usar Dictionary<string, List<string>>
), o (mejor) puede usar Lookup<TKey, TValue>
lugar del diccionario.
¿Cómo comprobar si hay claves duplicadas y eliminar el valor anterior del Diccionario?
Compruebe si existe la clave antes de agregar una nueva entrada:
if (!previousLines.ContainsKey(dialedno))
previousLines.Add(dialedno, line); // add new entry
else
previousLines[dialedno] = line; // update entry value
También puede usar la consulta LINQ para crear un diccionario con solo el último valor de cada clave (suponga que tiene una secuencia de objetos con las propiedades dialedno
y line
):
var previousLines = sequence.GroupBy(s => s.dialedno)
.ToDictionary(g => g.Key, g => g.Last().line);
Ejemplo:
class Program
{
private static List<KeyValuePair<string, int>> d = new List<KeyValuePair<string, int>>();
static void Main(string[] args)
{
d.Add(new KeyValuePair<string, int>("joe", 100));
d.Add(new KeyValuePair<string, int>("joe", 200));
d.Add(new KeyValuePair<string, int>("jim", 100));
var result = d.Where(x => x.Key == "joe");
foreach(var q in result)
Console.WriteLine(q.Value );
Console.ReadLine();
}
}
No es posible agregar elementos duplicados a un Diccionario; una alternativa es usar la clase Buscar .
Crea una búsqueda genérica a partir de un IEnumerable.
Podemos usar una lista de pares de valores clave
List<KeyValuePair<string, string>> myduplicateLovingDictionary= new List<KeyValuePair<string, string>>();
KeyValuePair<string,string> myItem = new KeyValuePair<string,string>(dialedno, line);
myduplicateLovingDictionary.Add(myItem);