web-dev-qa-db-fra.com

Dictionnaire avec liste de chaînes comme valeur

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)
25
user1186050

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);
34
Jon Skeet

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

}
12
sartoris

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