Сообщение Re[7]: Dictionary<X, Dictionary<Y, Z>> от 18.10.2015 10:00
Изменено 18.10.2015 10:42 Serginio1
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
S>>По уму нужно передавать в конструктор словаря конструктор значения по умолчанию.
S>>Тогда
S>> d.GetOrAdd(ключ) будет возвращать значение по умолчанию. И логика понятна.
EP>Либо тип-wrapper, у которого будет другой конструктор — так не будет оверхеда на хранение значения.
EP>Либо просто отдельная функция как уже выше предлагали, а-ля get_or_default(map, key, default).
Так есть же GetOrAdd Method в разных вариациях
Вот простейший
https://msdn.microsoft.com/en-us/library/ee378674(v=vs.110).aspx
EP>Здравствуйте, Serginio1, Вы писали:
S>>По уму нужно передавать в конструктор словаря конструктор значения по умолчанию.
S>>Тогда
S>> d.GetOrAdd(ключ) будет возвращать значение по умолчанию. И логика понятна.
EP>Либо тип-wrapper, у которого будет другой конструктор — так не будет оверхеда на хранение значения.
EP>Либо просто отдельная функция как уже выше предлагали, а-ля get_or_default(map, key, default).
Так есть же GetOrAdd Method в разных вариациях
Вот простейший
https://msdn.microsoft.com/en-us/library/ee378674(v=vs.110).aspx
Re[7]: Dictionary<X, Dictionary<Y, Z>>
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
S>>По уму нужно передавать в конструктор словаря конструктор значения по умолчанию.
S>>Тогда
S>> d.GetOrAdd(ключ) будет возвращать значение по умолчанию. И логика понятна.
EP>Либо тип-wrapper, у которого будет другой конструктор — так не будет оверхеда на хранение значения.
EP>Либо просто отдельная функция как уже выше предлагали, а-ля get_or_default(map, key, default).
Так есть же GetOrAdd Method в разных вариациях
Вот простейший
https://msdn.microsoft.com/en-us/library/ee378674(v=vs.110).aspx
Просто для не валуе типов нужна версия
https://msdn.microsoft.com/ru-ru/library/ee378677(v=vs.110).aspx
А с дефаултным конструктором значения код будет значительно короче, так как конструктор значения в основном всегда одинаков
То есть
Но по большому разница то не велика, если определить Func<TKey, TValue> как переменную
d.GetOrAdd(ключ)
d.GetOrAdd(ключ,Конструктор)
EP>Здравствуйте, Serginio1, Вы писали:
S>>По уму нужно передавать в конструктор словаря конструктор значения по умолчанию.
S>>Тогда
S>> d.GetOrAdd(ключ) будет возвращать значение по умолчанию. И логика понятна.
EP>Либо тип-wrapper, у которого будет другой конструктор — так не будет оверхеда на хранение значения.
EP>Либо просто отдельная функция как уже выше предлагали, а-ля get_or_default(map, key, default).
Так есть же GetOrAdd Method в разных вариациях
Вот простейший
https://msdn.microsoft.com/en-us/library/ee378674(v=vs.110).aspx
Просто для не валуе типов нужна версия
https://msdn.microsoft.com/ru-ru/library/ee378677(v=vs.110).aspx
public TValue GetOrAdd(
TKey key,
Func<TKey, TValue> valueFactory
)
А с дефаултным конструктором значения код будет значительно короче, так как конструктор значения в основном всегда одинаков
То есть
Но по большому разница то не велика, если определить Func<TKey, TValue> как переменную
d.GetOrAdd(ключ)
d.GetOrAdd(ключ,Конструктор)