J'ai quelques lignes de fichiers texte que je veux ajouter au dictionnaire.J'utilise le dictionnaire pour la première fois.Pendant l'ajout des lignes de départ, c'était Ok mais tout à coup, j'ai l'erreur
Un article avec la même clé a déjà été ajouté
Ici, dans mon code, il y a des clés en double que je ne peux pas changer. Voici mon code en c #
Dictionary<string, string> previousLines = new Dictionary<string, string> { };
previousLines.Add(dialedno, line);
Ici dialedno est la clé et la ligne est la ligne de fichier texte . Voici le code à partir duquel je récupère la ligne donnée en fonction de la clé.
string tansferOrginExt = previousLines[dialedno];
Donc, ma préoccupation est de savoir comment autoriser l’ajout de clés en double dans le dictionnaire, si possible, et comment puis-je obtenir une fonctionnalité similaire.
comment autoriser l'ajout de clés en double dans le dictionnaire
Ce n'est pas possible. Toutes les clés doivent être uniques. Comme Dictionary<TKey, TValue>
implémenté:
Chaque clé d'un
Dictionary<TKey, TValue>
doit être unique conformément à le comparateur d'égalité du dictionnaire.
Solutions possibles - vous pouvez conserver la collection de chaînes comme valeur (c'est-à-dire utiliser Dictionary<string, List<string>>
), ou (mieux) vous pouvez utiliser Lookup<TKey, TValue>
au lieu de dictionnaire.
comment vérifier les clés en double et supprimer la valeur précédente de Dictionnaire?
Vérifiez si la clé existe avant d'ajouter une nouvelle entrée:
if (!previousLines.ContainsKey(dialedno))
previousLines.Add(dialedno, line); // add new entry
else
previousLines[dialedno] = line; // update entry value
Vous pouvez également utiliser la requête LINQ pour créer un dictionnaire avec uniquement la dernière valeur pour chaque clé (supposons que vous avez une séquence d'objets avec les propriétés dialedno
et line
):
var previousLines = sequence.GroupBy(s => s.dialedno)
.ToDictionary(g => g.Key, g => g.Last().line);
Nous pouvons utiliser une liste de paires de valeurs clés
List<KeyValuePair<string, string>> myduplicateLovingDictionary= new List<KeyValuePair<string, string>>();
KeyValuePair<string,string> myItem = new KeyValuePair<string,string>(dialedno, line);
myduplicateLovingDictionary.Add(myItem);
Il n'est pas possible d'ajouter des éléments en double à un dictionnaire - une alternative consiste à utiliser la classe Lookup .
Crée une recherche générique à partir d'un IEnumerable.
Exemple:
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();
}
}
List< KeyValuePair < string, string>> listKeyValPair= new List< KeyValuePair< string, string>>();
KeyValuePair< string, string> keyValue= new KeyValuePair< string, string>("KEY1", "VALUE1");
listKeyValPair.Add(keyValue);
Si votre question est de savoir si vous pouvez ajouter deux fois la même clé, la réponse est Non . Cependant, si vous souhaitez simplement parcourir l'élément et augmenter le nombre de valeurs de la clé, vous pouvez y parvenir en utilisant Méthode "TryAdd".
var dict = new Dictionary<int, int>();
foreach (var item in array)
{
dict.TryAdd(item, 0);
dict[item]++;
}
La même chose que nous essayons de réaliser avec if else peut être réalisée avec cette méthode.