J'ai un dictionnaire où ma valeur est une liste. Lorsque j'ajoute des clés, si la clé existe, je veux ajouter une autre chaîne à la valeur (Liste)? Si la clé n'existe pas alors je crée une nouvelle entrée avec une nouvelle liste avec une valeur, si la clé existe alors je jsut ajouter une valeur à la valeur List ex.
Dictionary<string, List<string>> myDic = new Dictionary<string, List<string>>();
myDic.Add(newKey, add to existing list<strings> and not create new one)
Pour ce faire manuellement, vous auriez besoin de quelque chose comme:
List<string> existing;
if (!myDic.TryGetValue(key, out existing)) {
existing = new List<string>();
myDic[key] = existing;
}
// At this point we know that "existing" refers to the relevant list in the
// dictionary, one way or another.
existing.Add(extraValue);
Cependant, dans de nombreux cas, LINQ peut rendre cela trivial en utilisant ToLookup
. Par exemple, considérons un List<Person>
que vous souhaitez transformer en dictionnaire de "nom" en "prénoms pour ce nom". Vous pouvez utiliser:
var namesBySurname = people.ToLookup(person => person.Surname,
person => person.FirstName);
J'envelopperais le dictionnaire dans une autre classe:
public class MyListDictionary
{
private Dictionary<string, List<string>> internalDictionary = new Dictionary<string,List<string>>();
public void Add(string key, string value)
{
if (this.internalDictionary.ContainsKey(key))
{
List<string> list = this.internalDictionary[key];
if (list.Contains(value) == false)
{
list.Add(value);
}
}
else
{
List<string> list = new List<string>();
list.Add(value);
this.internalDictionary.Add(key, list);
}
}
}
Créez simplement un nouveau tableau dans votre dictionnaire
Dictionary<string, List<string>> myDic = new Dictionary<string, List<string>>();
myDic.Add(newKey, new List<string>(existingList));