Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
5 / 5 / 2
Регистрация: 17.11.2016
Сообщений: 69

Dictionary<int,List<int>> и IReadOnlyDictionary<int,IReadOnlyList<in­t>>

23.01.2018, 22:00. Показов 3311. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, столкнулся с такой ситуацией.
Есть Переменная
C#
1
2
Dictionaty<int,List<int>> Dic = new Dictionaty<int,List<int>>();
public IReadOnlyDictionary<int,IReadOnlyList<int>> ReadOnly => Dic; //Ошибка приведения типов
Для себя нашел несколько вариантов:
1)
C#
1
2
3
4
5
6
7
8
9
10
11
12
public IReadOnlyDictionary<int,IReadOnlyList<int>> ReadOnly 
{
  get
    {
      Dictionary<int,IReadOnlyList<int>> _return = new Dictionary<int,IReadOnlyList<int>>;
      foreach(var line in Dic)
      {
        _return.Add(Line.key, Line.value);
      }
      return _return;
    }
}
В чем проблема этого приема и так понятно

2)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public class Dictionary_List : Dictionary<int, List<int>>
    {
        private Dictionary<int, IReadOnlyList<int>> _readOnlyDictionary = new Dictionary<int, IReadOnlyList<int>>();
 
        public new void Add(int key, List<int> value)
        {
            base.Add(key, value);
            _readOnlyDictionary.Add(key, value);
        }
 
        public new void Clear()
        {
            base.Clear();
            _readOnlyDictionary.Clear();
        }
 
        public void Remove(int key)
        {
            base.Remove(key);
            _readOnlyDictionary.Remove(key);
        }
 
        public IReadOnlyDictionary<int, IReadOnlyList<int>> ReadOnlyDictionary => _readOnlyDictionary;
    }
Вариант получше, но тоже с минусами: увеличенные затраты памяти, если таких словарей много, то придется клепать кучу методов.

Есть ли у кого решения как это можно сделать более правильно. Желательно, чтобы это можно было маштабировать на примеры и более глубокой иерархии: List<Dictionary<string, List<int>>>

Добавлено через 7 минут
Унифицировал класс словаря из варианта 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 public class Dictionary_WithReadOnly<TKey, TValue1, TValue2> : Dictionary<TKey, TValue1> where TValue1: TValue2
    {
        private Dictionary<TKey, TValue2> _readOnlyDictionary = new Dictionary<TKey, TValue2>();
 
        public new void Add(TKey key, TValue1 value)
        {
            base.Add(key, value);
            _readOnlyDictionary.Add(key, value);
        }
 
        public new void Clear()
        {
            base.Clear();
            _readOnlyDictionary.Clear();
        }
        
        public void Remove(TKey key)
        {
            base.Remove(key);
            _readOnlyDictionary.Remove(key);
        }
 
        public IReadOnlyDictionary<TKey, TValue2> ReadOnlyDictionary => _readOnlyDictionary;
    }
Но все равно остается проблема излишней траты памяти.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2018, 22:00
Ответы с готовыми решениями:

Dictionary<int, int> получить наибольшее значение value (втрого int)
Dictionary&lt;int, int&gt; bet = new Dictionary&lt;int, int&gt;; bet.Add(1,20); bet.Add(2,50); int i = // сюда нужно записать большее значение...

Как преобразовать Dictionary<string, int> в Dictionary<object, int>
Есть метод с сигнатурой public KeyValuePair&lt;string, int&gt; MyMethod(Dictionary&lt;string, int&gt; dic, Random rndm) {} Алгоритму...

Как изменить элемент в Dictionary<int,int>?
Мне нужно изменить Value в одном из элементов библиотеки. Вот фрагмент кода. char azbuka; Dictionary&lt;int,...

5
 Аватар для Кузнец кода
169 / 188 / 35
Регистрация: 21.01.2018
Сообщений: 230
23.01.2018, 23:12
Посмотрите в сторону сборщика мусора (grabber collector) вы можете сами проверить с помощью его сколько памяти у вас занимает словарь при увеличении количества значений. Многие говорят, что помогает при принудительной очистки мусора, но это зависит от функционала вашей программы.
0
24.01.2018, 06:08

Не по теме:

Кузнец кода, что за чушь?)

0
 Аватар для Кузнец кода
169 / 188 / 35
Регистрация: 21.01.2018
Сообщений: 230
24.01.2018, 10:33
Не чушь, а реальность https://www.dotnetperls.com/dictionary-memory проверьте сами
1
Эксперт .NET
 Аватар для Usaga
14316 / 9402 / 1355
Регистрация: 21.01.2016
Сообщений: 35,461
24.01.2018, 10:35
Кузнец кода, я в общем, про ваш совет. Он вообще не в тему и не о том. И да, сборщик мусора: "Garbage Collector".
0
 Аватар для Кузнец кода
169 / 188 / 35
Регистрация: 21.01.2018
Сообщений: 230
24.01.2018, 10:37
Опечатался)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2018, 10:37
Помогаю со студенческими работами здесь

Конструкция Bitmap(int Width, int Height, int stride, PixelFor...
Есть одномерный массив данных data типа byte, int, float (довольно большой; картинка должна получиться типа 2000*4000px), его надо...

Dictionary<Tuple<string,string>, Dictionary<int,int>> dict - возможно ли?
Собственно вопрос в заголовке. Возможно ли использовать объект вида Dictionary&lt;Tuple&lt;string,string&gt;, Dictionary&lt;int,int&gt;&gt; ...

Добавление значений в Dictionary<char, List<int>>
Есть такой dictionary Dictionary&lt;char, List&lt;int&gt;&gt; H = new Dictionary&lt;char,List&lt;int&gt;&gt;(), и лист List&lt;int&gt; r = new List&lt;int&gt;(). Добавляю...

Работа со словарём в цикле Dictionary<int, List<string>>
Hi! Есть словарик. private static Dictionary&lt;int, List&lt;string&gt;&gt; test = new Dictionary&lt;int, List&lt;string&gt;&gt;(); заполнил, в...

Напишите метод int SumOfDigits (int n), вычисляющую сумму цифр числа N
Нужна помощь с некоторыми заданиями из практики Буду очень благодарен, если кто-то действительно поможет, правда На форуме первый раз,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru