c# string dictionary key text-files

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 .

Método Enumerable.ToLookup

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);