DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 07.02.18 12:22
Оценка:
Что думаете ?

https://github.com/rsdn/CodeJam/issues/39
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: DictionaryValuesExtensions
От: Sinix  
Дата: 07.02.18 14:42
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Что думаете ?

Ну, я бы просто подрубил MultiValueDictionary, он произвольные коллекции умеет.

Если нет — как насчёт
* возвращать bool в перегрузке, которая HashSet<T> принимает.
* отказаться от перегрузок для IList|ICollection. Есть риск в итоге получить словарь с разнотипными коллекциями в Values.

Имена ок.
Re[2]: DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 07.02.18 16:52
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, _NN_, Вы писали:


_NN>>Что думаете ?

S>Ну, я бы просто подрубил [url=https://github.com/dotnet/corefxlab/blob/master/src/System.Collections.Generic.MultiValueDictionary/System/Collections/Generic/MultiValueDictionary.cs
S>]MultiValueDictionary[/url], он произвольные коллекции умеет.
Это другое.
Также есть ещё PowerCollections.MultiDictionary с немного другим интерфейсом.
Тут переделывал код и хотелось что-нибудь с меньшими изменениями.

S>Если нет — как насчёт

S>* возвращать bool в перегрузке, которая HashSet<T> принимает.
Принято.
S>* отказаться от перегрузок для IList|ICollection. Есть риск в итоге получить словарь с разнотипными коллекциями в Values.
Ну если тип IColletion , а кто-то приводит в другой тип то как бы сам напрашивается на неприятности.
Это как если бы функция возвращала IDictionary, а его приводят к Dictionary.

S>Имена ок.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: DictionaryValuesExtensions
От: Sinix  
Дата: 07.02.18 19:31
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Ну если тип IColletion , а кто-то приводит в другой тип то как бы сам напрашивается на неприятности.

Всё равно неочевидно, имхо. Или явно factory передавать, или будут wtf.
Re[4]: DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 20.02.18 07:08
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, _NN_, Вы писали:


_NN>>Ну если тип IColletion , а кто-то приводит в другой тип то как бы сам напрашивается на неприятности.

S>Всё равно неочевидно, имхо. Или явно factory передавать, или будут wtf.
Наследоваться можно даже и от List<T> и от Dictionary<K,V> и удивляться также.

Не думаю, что фабрика тут поможет если имеем нисходящее приведение типов без оглядки.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 15.03.18 21:54
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, _NN_, Вы писали:


_NN>>Ну если тип IColletion , а кто-то приводит в другой тип то как бы сам напрашивается на неприятности.

S>Всё равно неочевидно, имхо. Или явно factory передавать, или будут wtf.

пинг.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: DictionaryValuesExtensions
От: Sinix  
Дата: 16.03.18 09:21
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>пинг.

Сорри
Я по-прежнему против варианта с IList/ICollection. Это прямой путь к аду с разнотипными коллекциями. В тред призывается остальной народ)

Можем сделать AddToValues<TKey, TCollection, TValue> ... where TCollection: new(), IColection<TValue>. Естественно, теряем на Activator.CreateInstance<T>(), но тут уж ничего не поделать. Не эмитить же.
Re[2]: DictionaryValuesExtensions
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.03.18 03:55
Оценка:
Здравствуйте, Sinix, Вы писали:

_NN>>Что думаете ?

S>Ну, я бы просто подрубил [url=https://github.com/dotnet/corefxlab/blob/master/src/System.Collections.Generic.MultiValueDictionary/System/Collections/Generic/MultiValueDictionary.cs
S>]MultiValueDictionary[/url], он произвольные коллекции умеет.

Можно еще LazyDictionary использовать
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 18.03.18 18:33
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, _NN_, Вы писали:


_NN>>пинг.

S>Сорри
S>Я по-прежнему против варианта с IList/ICollection. Это прямой путь к аду с разнотипными коллекциями. В тред призывается остальной народ)
Т.е. решаем ситуацию когда автор написал IList и везде пользуется им как List с явными преобразованиями ?
Это изначально ошибочный код, и даже без AddToValues легко его поломать.
Может тогда сразу в КСВ , там больше тусуется заодно и другие острые темы затронуть можно

S>Можем сделать AddToValues<TKey, TCollection, TValue> ... where TCollection: new(), IColection<TValue>. Естественно, теряем на Activator.CreateInstance<T>(), но тут уж ничего не поделать. Не эмитить же.

А как это решает проблему ? Можно явно передавать тип коллекции конечно, но идея в том чтобы этого не делать.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 05.01.19 16:16
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Что думаете ?


_NN>https://github.com/rsdn/CodeJam/issues/39


Хотелось бы всё таки включить функционал в библиотеку.
Что насчёт другого именования ?
Например AddToList или AddOrCreateList
Это достаточно точно описывает, что создаётся List<T> ?
По аналогии можно сделать AddToHashSet/AddOrCreateHashSet.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: DictionaryValuesExtensions
От: _NN_ www.nemerleweb.com
Дата: 27.01.19 09:52
Оценка:
Здравствуйте, _NN_, Вы писали:

Обновил PR: https://github.com/rsdn/CodeJam/pull/74/files
В таком виде подойдёт ?
Можно добавить и других коллекций как Queue, Stack и т.п. если готовы взять в библиотеку.

            var d = new Dictionary<string, ICollection<int>>();
            d.AddOrCreateList("a", 1);
            Assert.AreEqual(1, d["a"].First());

            d["b"] = new List<int> { 2 };
            d.AddOrCreateList("b", 3);
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.