Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45

Единые значения для Dictionary и List

09.02.2015, 15:36. Показов 4404. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

У меня есть словарь в нем будет храниться большое количество значений.
И есть List в лист из словаря я буду добавлять часть из этих значений делать с ними какие то действия.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
            
            Dictionary<int, Planet> testOne = new Dictionary<int, Planet>();
 
 
            Planet planetOne = new Planet();
            planetOne.Name = "Vega";
 
            Planet planetTwo = new Planet();
            planetTwo.Name = "Mega";
 
            Planet planetThree = new Planet();
            planetThree.Name = "Beta";
 
            testOne.Add(0, planetOne);
            testOne.Add(1, planetTwo);
            testOne.Add(2, planetThree);


C#
1
2
3
4
5
6
            
            List<Planet> testTwo = new List<Planet>();
 
            testTwo.Add(testOne[0]);
            testTwo.Add(testOne[1]);
            testTwo.Add(testOne[2]);
Собственно вопрос когда я меняю значения в словаре и в листе они меняются для обоих, но если я удаляю объект из List или Dictionary они остаются там где я их не удалил.

Мне нужно чтобы значение было единым для всех если я его удалю из словаря его не стало в листе.
И для листа мне нужно иметь возможность удалить из лист не удаляя из словаря и удалить из листа и из словаря.

Как это делается что надо использовать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2015, 15:36
Ответы с готовыми решениями:

Сложный Dictionary<MyClass, Dictionary<List<MyClass2>, List<string>>> MyDictionary
Здравствуйте. Помогите plz реализовать обращения к словарю вида : Dictionary&lt;MyClass, Dictionary&lt;List&lt;MyClass2&gt;,...

Сериализация для Dictionary<DateTime, List<string>>
как сериализовать в XML Dictionary&lt;DateTime, List&lt;string&gt;&gt;?

Правильное использование и перебор для Dictionary<DateTime, List<string>>
Здравствуйте! есть Dictionary&lt;DateTime, List&lt;string&gt;&gt; datenote = new Dictionary&lt;DateTime, List&lt;string&gt;&gt;(); public void...

28
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
09.02.2015, 16:39  [ТС]
Студворк — интернет-сервис помощи студентам
Я понял вас я просто про эти методы даже не слышал никогда ну щас почитаю пойму что к чему.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
09.02.2015, 16:42
Цитата Сообщение от x5reunion Посмотреть сообщение
про эти методы даже не слышал никогда
Это не методы, а классы. Если точнее, классы коллекций, которые отслеживают свое состояние и при изменении генерируют событие.
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
09.02.2015, 16:42
Цитата Сообщение от x5reunion Посмотреть сообщение
Всех благодарю за ответы буду дальше разбираться, я понял что задача не решается простым способом.
Указанный мной метод соответствует вашим критериям. Или еще какие условия есть?
0
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
09.02.2015, 18:14
Во! на sqlite
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using System;
using System.Data.SQLite;
 
 
namespace SQLITE {
    class Program {
        static void Main() {
            SQLiteConnection cn = new SQLiteConnection("Data Source=db_sqlite.db; Version=3;");
            try {
                cn.Open();
                if (cn.State == System.Data.ConnectionState.Open) {
                    SQLiteCommand cmd = cn.CreateCommand();
                    string strCmd = @"
                    --чтоб внешние ключи работали
                    PRAGMA FOREIGN_KEYS=ON;
 
                    --таблица возможных планет
                    DROP TABLE IF EXISTS Планеты;
                    CREATE TABLE Планеты(
                        id INTEGER PRIMARY KEY AUTOINCREMENT,
                        Имя TEXT,
                        Радиус INTEGER, 
                        ДатаОткрытия INTEGER);
 
                    INSERT INTO Планеты(Имя, Радиус, ДатаОткрытия) 
                    VALUES ('Марс', 3397, strftime('%s', '2015-01-01'));
 
                    INSERT INTO Планеты(Имя, Радиус, ДатаОткрытия) 
                    VALUES ('Венера', 6051, strftime('%s', '2015-01-02'));
 
                    INSERT INTO Планеты(Имя, Радиус, ДатаОткрытия) 
                    VALUES ('Земля', 6371, strftime('%s', '2015-01-03'));
 
                    INSERT INTO Планеты(Имя, Радиус, ДатаОткрытия) 
                    VALUES ('Юпитер', 69911, strftime('%s', '2015-01-04'));
 
                    INSERT INTO Планеты(Имя, Радиус, ДатаОткрытия) 
                    VALUES ('Сатурн', 60268, strftime('%s', '2015-01-04'));                    
                    
                    --Список планет
                    DROP TABLE IF EXISTS СписокВыбранныхПланет;
                    CREATE TABLE СписокВыбранныхПланет(
                        idd INTEGER PRIMARY KEY AUTOINCREMENT,
                        idPlanet INTEGER ,
                        FOREIGN KEY(idPlanet) REFERENCES Планеты(id) ON DELETE CASCADE);
                    
                    INSERT INTO СписокВыбранныхПланет(idPlanet) VALUES (1);
                    INSERT INTO СписокВыбранныхПланет(idPlanet) VALUES (2);
                    
                    ";
 
                    cmd.CommandText = strCmd;
                    cmd.ExecuteNonQuery();
 
                    cmd.CommandText = "SELECT count(id) FROM Планеты";
                    object amount = cmd.ExecuteScalar();
                    Console.WriteLine("Всего строк: {0}",amount.ToString());
 
                    cmd.CommandText  = "SELECT * FROM Планеты";
                    SQLiteDataReader r = cmd.ExecuteReader();
                    string strline = String.Empty;
                    while (r.Read()) {
                        strline = string.Format("id={0}, Имя={1}, Радиус={2}, Дата открытия={3}", r["id"], r["Имя"], r["Радиус"], r["ДатаОткрытия"]);
                        Console.WriteLine(strline);
                    }
                    r.Close();
 
                    cmd.CommandText  = @"SELECT * 
                                         FROM СписокВыбранныхПланет as t
                                              left join Планеты as p on(p.id=t.idPlanet)";
                    r = cmd.ExecuteReader();
                    while (r.Read()) {
                        strline = string.Format("idd={0}, id={1}, Имя={2}, Радиус={3}, Дата открытия={4}", r["idd"], r["id"], r["Имя"], r["Радиус"], r["ДатаОткрытия"]);
                        Console.WriteLine(strline);
                    }
                    r.Close();
 
                    cmd.CommandText = "delete from Планеты where id=@id";
                    cmd.Parameters.AddWithValue("@id", 1);
                    cmd.ExecuteNonQuery();
 
 
                    cmd.CommandText  = "SELECT * FROM Планеты";
                    r = cmd.ExecuteReader();
                    while (r.Read()) {
                        strline = string.Format("id={0}, Имя={1}, Радиус={2}, Дата открытия={3}", r["id"], r["Имя"], r["Радиус"], r["ДатаОткрытия"]);
                        Console.WriteLine(strline);
                    }
                    r.Close();
 
                    cmd.CommandText  = @"SELECT * 
                                         FROM СписокВыбранныхПланет as t
                                              left join Планеты as p on(p.id=t.idPlanet)";
                    r = cmd.ExecuteReader();
                    while (r.Read()) {
                        strline = string.Format("idd={0}, id={1}, Имя={2}, Радиус={3}, Дата открытия={4}", r["idd"], r["id"], r["Имя"], r["Радиус"], r["ДатаОткрытия"]);
                        Console.WriteLine(strline);
                    }
                    r.Close();
 
                    cn.Dispose();
                }
            } catch (SQLiteException ex) {
                Console.WriteLine(ex.Message);
            }
 
            Console.ReadLine();
        }
    }
}
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.02.2015, 19:42
x5reunion, а зачем вам вообще эти цифры 1 2 3? И являются ли они разреженными?
0
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
10.02.2015, 20:00  [ТС]
Я пока отложил решение задачи она оказалась сложнее чем я думал, я тут посмотрел несколько примеров из темы, некоторые слишком сложны некоторые не подходят.

А по поводу ключа да без словаря никак не обойтись.
Элемент не обязательно будет находится постоянно в одном и том же списке, но должна быть возможность найти его в любой момент по ключу.
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
10.02.2015, 23:35
Цитата Сообщение от x5reunion Посмотреть сообщение
Мне нужно иметь возможность удалить планету из Dictionary, чтобы она сразу удалилась и из List.
И иметь возможность удалить планету из List не удаляя из словаря.
И иметь возможность удалить планету из List и из Dictionary.
Оно?
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
        Dictionary<int, Planet> testOne = new Dictionary<int, Planet>();
        List<Planet> testTwo = new List<Planet>();
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Planet planetOne = new Planet();
            planetOne.Name = "Vega";
 
            Planet planetTwo = new Planet();
            planetTwo.Name = "Mega";
 
            Planet planetThree = new Planet();
            planetThree.Name = "Beta";
 
 
 
            testOne.Add(0, planetOne);
            testOne.Add(1, planetTwo);
            testOne.Add(2, planetThree);
 
            testTwo.Add(testOne[0]);
            testTwo.Add(testOne[1]);
            testTwo.Add(testOne[2]);
            RemListDic(planetThree);
 
        }
 
        private void RemDicList(int index)
        {
            testTwo.Remove(testOne[index]);
            testOne.Remove(index);          
        }
 
        private void RemList(Planet planet)
        {
            testTwo.Remove(planet);
        }
 
        private void RemListDic(Planet planet)
        {
           int ****ey=-1;
 
            RemList(planet);
 
            foreach (System.Collections.Generic.KeyValuePair<int, Planet> item in testOne)
            {
                if (item.Value == planet) ****ey = item.Key;
            }
 
            if (****ey != -1) testOne.Remove(****ey);
        }
    }
 
    class Planet
    {
        public string Name { get; set; }
    }
1
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
11.02.2015, 00:27  [ТС]
Благодарю за ответы, я просто думал в NET есть какие то спец функции, которые можно использовать и все упростить но я понял что все равно придется все свое писать. Что бы это реализовать.

Я думаю просто добавлю к классу свойство ID и буду ему присваивать ключ в словаре ну и далее там разберу или еще потом подумаю.
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
11.02.2015, 00:39
x5reunion, можно так сделать:
C#
1
Func<List<Planet>> lst = () => dict.Values.ToList();
Обращатся к Листу нужно так: lst().Count, например.
Если удалите элемент из словаря - то и в lst() его не будет

Добавлено через 33 секунды
Код писал в браузере, но, надеюсь, идея ясна
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2015, 00:39

Sort list in Dictionary
У меня есть Dictionary, в котором ключом служат размеры файла в килобайтах, а значением листы с информацией о файлах которые столько...

Единые объект клиента для всех запросов в express.js
Приветствую. Интересует запись данных в handle клиента. Работая с TCP делаю так handle.myObject = {} В Express.js же ...

XmlDocument против Dictionary и List
Сразу к сути: В классе используются var dic = new Dictionary&lt;string, Dictionary&lt;string, int&gt;&gt;(); var dic2 = new...

Сортировка Dictionary вложенного в List
Как отсортировать по алфавиту List&lt;Dictionary&lt;string, string&gt;&gt;. Заранее спасибо

Сравнение List, Dictionary, Hashset
Здравствуйте! Подскажите, где можно узнать про колекции List, Dictionary, Hashset такие вещи как: 1) алгоритмы их работы 2)...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru