Словарь со списком строк как значение
У меня есть словарь, где мое значение - это 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)
Ответы
Ответ 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));