Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/153: Рейтинг темы: голосов - 153, средняя оценка - 4.57
8 / 8 / 2
Регистрация: 14.06.2011
Сообщений: 115

Как записать две пары с одинаковыми ключами в Dictionary?

15.07.2011, 15:25. Показов 33086. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как записать две пары с одинаковыми ключами в Dictionary?

Добавлено через 7 минут
Как внести в dictionary вообще 2 одинаковые записи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2011, 15:25
Ответы с готовыми решениями:

Определить, есть ли две пары соседних элементов с одинаковыми знаками
Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка . 1. Вывести индексы тех элементов, значения...

HashMap с одинаковыми ключами
Здравствуйте. Пытаюсь переопределить методы equals() и hashCode(), чтобы можно было создать объект с одинаковыми ключами, но не выходит,...

Собрать 4 массива в один с одинаковыми ключами
На входе 4 массива program_times Array ( => 09:30 - 10:00 => 10:30 - 13:00 => 10:00 - 12:00 => 11:00 - 13:00 ) ...

51
Эксперт .NET
 Аватар для Usaga
14813 / 9587 / 1368
Регистрация: 21.01.2016
Сообщений: 36,110
23.07.2017, 18:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от rams Посмотреть сообщение
однако варианты с проверкой ключа хороши только для небольших данных, а хотя бы на 10 000 ContainsKey так все затормозит или свое выдумывать тоже морока
Что?
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
23.07.2017, 18:41
KeyValuePair read only
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 KeyValuePair<int, int> fail = new KeyValuePair<int, int>();//read only
            fail.Value = 1;//opa xyz
 
 Dictionary<object, string> test = new Dictionary<object, string>();
            //Упаковка и распаковка
            int x = 1;
            float y = 3.14f;
            char c = '\0';
 
            test.Add("test", "Ж");
            test.Add(x, "о");
            test.Add(y, "П");
            test.Add(c, "а");
 
            y = (float)test.Keys.ElementAt(2);
            test[test.Keys.ElementAt(0)] = "hello";
Хотя тут уж дело вкуса а приличного встроенного варианта нет
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18419 / 14350 / 5371
Регистрация: 17.03.2014
Сообщений: 29,033
Записей в блоге: 1
23.07.2017, 18:54
Илиrams, KeyValuePair нужно создавать через конструктор принимающий ключ и значение. Менять их после создания нельзя, но если есть такая необходимость, то можно написать класс Pair<T,U> и пользоваться им.

Цитата Сообщение от rams Посмотреть сообщение
однако варианты с проверкой ключа хороши только для небольших данных, а хотя бы на 10 000 ContainsKey так все затормозит или свое выдумывать тоже морока
Тоже не понял что это значит. Можешь подробнее описать суть задачи?
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
23.07.2017, 19:03
А если лень создавать класс Pair<T, U>, то можно заюзать новые кортежи:
C#
1
2
3
4
5
List<(object Key, string Value)> test = new List<(object, string)>();
 test.Add(("test", "Ж"));
 test.Add((x, "о"));
 test.Add((y, "П"));
 test.Add((c, "а"));
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
23.07.2017, 19:28
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Тоже не понял что это значит. Можешь подробнее описать суть задачи?
Я просто спешил, Имеется ввиду то что часто заранее не известно уникален ключ или нет и проверка типа if(!test.ContainsKey(x)){что то сделать} может сильно тормозить при вариантах от 10 000 значений

Про собственный класс это отдельный вопрос, а чем он лучше моего варианта?
А вот кортежи не пользовался не знаю попробую
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18419 / 14350 / 5371
Регистрация: 17.03.2014
Сообщений: 29,033
Записей в блоге: 1
23.07.2017, 19:40
Цитата Сообщение от rams Посмотреть сообщение
Про собственный класс это отдельный вопрос, а чем он лучше моего варианта?
Тем что он прост, понятен, универсален и не использует возможности языка не по делу.
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
23.07.2017, 19:56
Цитата Сообщение от Fleder Посмотреть сообщение
А если лень создавать класс Pair<T, U>, то можно заюзать новые кортежи:
List<(object Key, string Value)> test = new List<(object, string)>();
Что этот код у меня не идет по синтаксису, может что то включить надо?
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
23.07.2017, 19:59
rams, нужно в свойствах проекта сделать целевую платформу .NET Framework 4.7


Это тип System.ValueTuple. Он идёт в составе .NET Framework 4.7 или его можно как-то через NuGet установить отдельно.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
23.07.2017, 20:08
Цитата Сообщение от Fleder Посмотреть сообщение
нужно в свойствах проекта сделать целевую платформу .NET Framework 4.7
Версия .NET не имеет абсолютно никакого значения. Код компилируются любым компилятором поддерживающим C# 7.0 (из известных мне только Roslyn, необходимая версия поставляется вместе с VS2017).
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
23.07.2017, 20:15
Someone007,

А вы сами-то пробовали подобный синтаксис под другой целевой платформой, которая указана в свойствах проекта?
Я сейчас специально изменил на .NET Framework 4.6.1 и синтаксис "упал".

Когда ставил VS2017 тоже по наивности думал, что вместе с ней поставится .NET 4.7 - шиш там плавал!
Пришлось устанавливать его отдельно.
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
23.07.2017, 20:22
Так парни я вижу вы зарубились, а я то так и не понял .NET Framework 4.7 надо поставить? VS 2017? компилятор поменять?
У меня VS 2015 net 4.7 нету
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
23.07.2017, 20:27
rams, нужна VS2017 и отдельно скачать и установить .NET 4.7 (или через NuGet скачать пакет "System.ValueTuple").
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
23.07.2017, 21:04
Цитата Сообщение от Fleder Посмотреть сообщение
Someone007,
А вы сами-то пробовали подобный синтаксис под другой целевой платформой, которая указана в свойствах проекта?
Я сейчас специально изменил на .NET Framework 4.6.1 и синтаксис "упал".
Когда ставил VS2017 тоже по наивности думал, что вместе с ней поставится .NET 4.7 - шиш там плавал!
Пришлось устанавливать его отдельно.
Так в любом случае проблема не в версии .NET, а в отсутствии типа ValueTuple в версиях ниже 4.7, в прочем "проблема" легко решается установкой соответствующего пакета с nuget. Хотя наличие или отсутствие типа ValueTuple не отменяет необходимости поддержки C# 7.0 компилятором.

Хотя для обсуждаемой тут задачи было бы проще просто объявить класс/структуру с 2 свойствами и запихнуть в List<T>...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        class KeyValuePairEx<K, V>
        {
            public K Key { get; set; }
            public V Value { get; set; }
 
            public KeyValuePairEx() { }
 
            public KeyValuePairEx(K key, V val)
            {
                Key = key;
                Value = val;
            }
        }
 
            List<KeyValuePairEx<string, string>> test = new List<KeyValuePairEx<string, string>>();
            test.Add(new KeyValuePairEx<string, string>() { Key = "123",  Value = "456" });
            test.Add(new KeyValuePairEx<string, string>("123", "789"));
Это в случае если не нужен быстрый доступ по ключу, а если нужен то на первой странице уже предлагали Dictionary<Key, List<Value>>...
0
Эксперт .NET
 Аватар для Usaga
14813 / 9587 / 1368
Регистрация: 21.01.2016
Сообщений: 36,110
24.07.2017, 06:16
Цитата Сообщение от rams Посмотреть сообщение
Имеется ввиду то что часто заранее не известно уникален ключ или нет и проверка типа if(!test.ContainsKey(x)){что то сделать} может сильно тормозить при вариантах от 10 000 значений
Да с чего бы? Ключ в Dictionary всегда уникален. При записи, такую проверку автоматически делает метод Add(), который кинет исключение. Да и ContainsKey() вполне можно выполнить, если нужно, ведь Dictionary (если мы о нём) - хеш-таблица, поиск по которой происходит ну очень быстро.

Откуда была взята информация про тормоза при 10.000 элементов?
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
24.07.2017, 14:19
Fleder, Вообщем для этого
C#
1
List<(object Key, string Value)> test = new List<(object, string)>();
синтаксиса нужна VS2017 ну и System.ValueTuple
В VS2015 работает, если скачать и установить nuget roslyn последней версии, но везде пишет ошибки синтаксиса, хотя собирается и запускается без проблем, вообщем для реального использования не годится.
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
24.07.2017, 14:25
rams, VS2015 не поддерживает C# 7.0
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
24.07.2017, 14:27
А так вещь нужная для записи в бд особенно, конкретно взял на вооружение ValueTuple правда с другим синтаксисом
C#
1
 List<ValueTuple<string, string>> data = new List<ValueTuple<string, string>>();
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
24.07.2017, 14:32
rams, а ваша VS2015 не ругается на такой тип:
C#
1
List<ValueTuple<string Key, string Value>> data = new List<ValueTuple<string, string>>();
?
0
24 / 24 / 5
Регистрация: 04.04.2012
Сообщений: 107
24.07.2017, 14:43
Fleder, Как я понял Tuple тип еще в разработке видимо поддерживает как то пользуюсь же

Добавлено через 7 минут
Fleder, Ругается на именованные аргументы. Я думаю возможно в дальнейшем они при использовании будут отображаться, что было удобно сейчас там Item1 Item2 Item3
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
24.07.2017, 14:49
rams, ставьте VS2017
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.07.2017, 14:49

2 или более записей с одинаковыми ключами
Добрый день,в общем у меня 2 таблицы:Договор - Товар, связь 1 - М. Получается ключ пишется у нас в товаре. Не могу понять как...

Как записать ассоциативный массив с ключами в файл txt ?
И как считать это все дело с сохранением ключей

Как записать с Dictionary в файл
Здравствуйте, такой вопрос. Есть Dictionary в который были записаны ключи и данные с файла setting.txt. В файле эти данные хранятся в виде...

Dictionary как записать 1000000 значений?
Здравствуйте. У меня такая проблема, у меня есть массив из 1000000 рандомных значений и нужно найти совпадения в этом массиве. Я написал...

Две функции с одинаковыми именами в разных модулях как быть?
#ifndef USART0_H_ #define USART0_H_ static void txSend(uint8_t data); #endif /* USART0_H_ */ #ifndef UART_H_ #define...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru