Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686

Как создать новый словарь из старого?

06.05.2023, 09:58. Показов 721. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать новый словарь из старого перемешивая слова из старого словаря случайным образом
Написал такой класс. Неправильно работает. Как правильно записать новый словарь? Прошу помощи.

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Тренажёр_памяти
{
    internal class DictionaryShuffle
    {
        private Dictionary<int, string> words;
 
        public DictionaryShuffle()
        {
            this.words = new Dictionary<int, string>
        {
            { 1, "яблоко" }, { 2, "банан" }, { 3, "автомобиль" }, { 4, "собака" }, { 5, "слон" },
            { 6, "цветок" }, { 7, "виноград" }, { 8, "дом" }, { 9, "мороженое" }, { 10, "куртка" },
            { 11, "кенгуру" }, { 12, "лев" }, { 13, "гора" }, { 14, "ноутбук" }, { 15, "апельсин" },
            { 16, "карандаш" }, { 17, "королева" }, { 18, "кролик" }, { 19, "солнце" }, { 20, "дерево" },
            { 21, "зонтик" }, { 22, "скрипка" }, { 23, "вода" }, { 24, "ксилофон" }, { 25, "яхта" },
            { 26, "зебра" }, { 27, "самолёт" }, { 28, "книга" }, { 29, "кошка" }, { 30, "дверь" }
        };
        }
 
        public void Shuffle()
        {
            var rnd = new Random();
            var keys = new List<int>(_words.Keys);
 
            // перемешиваем ключи в списке
            for (int i = keys.Count - 1; i > 0; i--)
            {
                int j = rnd.Next(i + 1);
                int tmp = keys[i];
                keys[i] = keys[j];
                keys[j] = tmp;
            }
 
            // выводим первоначальный словарь
            Console.WriteLine("Исходный словарь:");
            foreach (int key in _words.Keys)
            {
                Console.WriteLine($"{key}: {_words[key]}");
            }
 
            // создаем новый словарь с перемешанными элементами
            var shuffled = new Dictionary<int, string>();
            foreach (int key in keys)
            {
                shuffled.Add(key, _words[key]);
            }
 
            // выводим перемешанный словарь
            Console.WriteLine("\nПеремешанный словарь:");         
     
            foreach (int key in shuffled.Keys)
            {
               
                Console.WriteLine("[{0}, {1}]", key, shuffled[key]);
            }
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2023, 09:58
Ответы с готовыми решениями:

Как создать новый массив на основе старого?
Что бы создать новый список на основе старого - всё просто. Одна строчка: ...

Как создать новый фрейм-документ на базе старого
Всем привет! Задачка такая: есть базовый фрейм-документ index.html. В нем три фрейма: заголовок(верхний), меню (левый) и текст (правый)....

Как создать новый массив из элементов старого, которые будут содержать определенные свойства
Добрый вечер. Есть массив с пользователями. Пользователь - объект с набором свойств. Необходимо создать функцию, которая выведет новый...

9
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.05.2023, 10:36
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var _words = new Dictionary<int, string>
        {
            { 1, "яблоко" }, { 2, "банан" }, { 3, "автомобиль" }, { 4, "собака" }, { 5, "слон" },
            { 6, "цветок" }, { 7, "виноград" }, { 8, "дом" }, { 9, "мороженое" }, { 10, "куртка" },
            { 11, "кенгуру" }, { 12, "лев" }, { 13, "гора" }, { 14, "ноутбук" }, { 15, "апельсин" },
            { 16, "карандаш" }, { 17, "королева" }, { 18, "кролик" }, { 19, "солнце" }, { 20, "дерево" },
            { 21, "зонтик" }, { 22, "скрипка" }, { 23, "вода" }, { 24, "ксилофон" }, { 25, "яхта" },
            { 26, "зебра" }, { 27, "самолёт" }, { 28, "книга" }, { 29, "кошка" }, { 30, "дверь" }
        };
 
var keys = _words.Keys.OrderBy(_ => Guid.NewGuid()).Select((key, i) => (key, i));
var values = _words.Values.OrderBy(_ => Guid.NewGuid()).Select((value, i) => (value, i));
var result = keys.Join(values, x => x.i, x => x.i, (k, v) => (k.key, v.value))
                 .ToDictionary(x => x.key, x => x.value);
 
Console.WriteLine(string.Join("\n", result.Select(x => $"[{x.Key}] = {x.Value}")));
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
06.05.2023, 10:51  [ТС]
Не получается. Получился вот такой словарь. Нужно получить новый словарь без старых ключей. Что делать?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
06.05.2023, 11:31
vlad56,
Цитата Сообщение от vlad56 Посмотреть сообщение
Нужно получить новый словарь без старых ключей
хотите, чтобы ни один новый ключ не пересекался ни с одним ключом из старого словаря?
Но у Вас у самого стоит комментарий // перемешиваем ключи в списке
так что Вы хотите?
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
06.05.2023, 11:45  [ТС]
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
хотите, чтобы ни один новый ключ не пересекался ни с одним ключом из старого словаря?
Но у Вас у самого стоит комментарий // перемешиваем ключи в списке
так что Вы хотите?
Да. Я получил такой же словарь поэтому я здесь. Я перемешивал ключи чтобы их потом добавить в перемешанном виде к словам. Но получилось так как получилось. Прошу помощи. Как сделать новый словарь из старого со случайно перемешанными словами без старых ключей?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
06.05.2023, 11:48
vlad56,
Цитата Сообщение от vlad56 Посмотреть сообщение
Я перемешивал ключи чтобы их потом добавить в перемешанном виде к словам
Вам же прислали решение, что отображено на Вашем же скрине. у Вас в словаре ключ для значения "яблоко" = 1, на скриншоте ключ стал 27. какие у Вас претензии к этому алгоритму?
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
06.05.2023, 11:54  [ТС]
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
Вам же прислали решение, что отображено на Вашем же скрине. у Вас в словаре ключ для значения "яблоко" = 1, на скриншоте ключ стал 27. какие у Вас претензии к этому алгоритму?
Но в rezult яблоко всё равно на первом месте. Это же видно из скрина. А откуда там цифра 27 взялась это уже другой вопрос.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
06.05.2023, 11:57
vlad56,
Цитата Сообщение от vlad56 Посмотреть сообщение
Но в rezult яблоко всё равно на первом месте
вот это интересное заявление. а банан на втором месте? а автомобиль - на третьем?
что-то не улавливаю сути претензии. запустите второй раз программу, посмотрите, где сейчас будет то или иное значение
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
06.05.2023, 12:06  [ТС]
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
вот это интересное заявление. а банан на втором месте? а автомобиль - на третьем?
что-то не улавливаю сути претензии. запустите второй раз программу, посмотрите, где сейчас будет то или иное значение
Спасибо не правильно понял консоль. Прошу прощения за лишнюю затрату времени на этот вопрос. А как же тогда правильно читать консоль?
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
06.05.2023, 12:41
vlad56, вы перепутали индекс с ключем. Т.е. внутри Dictionary хранится некий массив с элементами Key-Value. Мы можем обратиться по Key к конкретному Value, но сам Key не определяет индекс, по которому он будет находиться во внутреннем массиве. Строго говоря Key не всегда число или строка, а вполне себе может быть сложная структура или даже класс, так что не стоит воспринимать его как аналог индексу в массиве.

Добавлено через 1 минуту
для наглядности быстро отсортировать по ключам можно как-то так
C#
1
Console.WriteLine(string.Join("\n", result.OrderBy(x => x.Key).Select(x => $"[{x.Key}] = {x.Value}")));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2023, 12:41
Помогаю со студенческими работами здесь

Создать новый шаблон исходя из старого
Здравствуйте. Есть шаблон страницы: &lt;?php get_header();?&gt; //Выводит шапку сайта &lt;div id=&quot;content&quot;&gt; //Загружает блок...

Хочу создать новый столбец из значений старого делёные на 1000
Как осуществить код, если возникает ошибка &quot;копирования&quot;? (A value is trying to be set on a copy of a slice from a DataFrame.) ...

Хочу создать новый столбец из значений старого делёные на 1000
Как осуществить код, если возникает ошибка &quot;копирования&quot;? (A value is trying to be set on a copy of a slice from a DataFrame.) ...

Как создать новый словарь используя в качестве ключей пересечение и объединение ключей вида ValueTuple
Здравствуйте! Мне кажется вопрос интересный, у меня пока не получилось. Создал словарь. SortedDictionary&lt;(int, int), int&gt;...

Дан одномерный массив. Создать новый складывая парами элементы старого
Помогите, прошу, я пытался что то сделать но не получилось вот что получилось, но оно не работает. Может подкорректируйте? ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru