Подтвердить что ты не робот

Словарь со списком строк как значение

У меня есть словарь, где мое значение - это List. Когда я добавляю ключи, если ключ существует, я хочу добавить еще одну строку в значение (Список)? Если ключ не существует, я создаю новую запись с новым списком со значением, если ключ существует, тогда я добавлю значение в значение List напр.

Dictionary<string, List<string>> myDic = new Dictionary<string, List<string>>();
myDic.Add(newKey, add to existing list<strings> and not create new one)
4b9b3361

Ответ 1

Чтобы сделать это вручную, вам нужно что-то вроде:

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

Однако во многих случаях LINQ может сделать это тривиальным, используя ToLookup. Например, рассмотрите List<Person>, который вы хотите преобразовать в словарь "фамилия" в "имена для этой фамилии". Вы можете использовать:

var namesBySurname = people.ToLookup(person => person.Surname,
                                     person => person.FirstName);

Ответ 2

Я бы закрепил словарь в другом классе:

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

}

Ответ 3

Просто создайте новый массив в словаре

Dictionary<string, List<string>> myDic = new Dictionary<string, List<string>>();
myDic.Add(newKey, new List<string>(existingList));