Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 07.10.2018
Сообщений: 11
.NET 4.x

Объединение двух списков List<string>

18.12.2018, 11:43. Показов 2187. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 списка Schedule И Changes.
В каждом есть несколько элементов вида №. Lesson Group|Cab (пример: 1. Математика И-10|407).

Нужно объединить эти 2 списка по принципу - если в Changes есть элемент с № таким же как в Schedule - то этот элемент Schedule заменяется на Changes И если в Schedule нет элемента с № из Changes, тот этот элемент Changes добавляется в Schedule.

пока получилось сделать это так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for (int i = 0; i < Changes.Count(); i++)
            {
                bool NotContains = false;
                for (int k = 0; k < Schedule.Count(); k++)
                {
                    if (Changes[i][0] == Schedule[k][0])
                    {
                        Schedule[k] = Changes[i];
                        NotContains = false;
                    }
                    else
                    {
                        NotContains = true;
                    }
                    if (NotContains == true)
                    {
                        Schedule.Add(Changes[i]);
                        NotContains = false;
                    }
                }
            }
Но по итогу, если в Changes несколько элементов, то получаю несколько повторяющихся элементов в результате например:

2. Иностранный язык
П-1 | 413
1. Астрономия
ПК-1 | Спортзал
3. Русский язык и культура речи
ИСП-1 | 407
3. Русский язык и культура речи
ИСП-1 | 407
4. Литература
ИС-1 | С-3
4. Литература
ИС-1 | С-3
4. Литература
ИС-1 | С-3
4. Литература
ИС-1 | С-3

Решил это дело костылем - просто убираю повторяющиеся элементы, но все же это костыль...
Немогу додумать как реализовать это не прибегая к подобным костылям?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2018, 11:43
Ответы с готовыми решениями:

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например, у меня есть в определенном директории...

List<string> C#
как реализовать быстрое сохранение списка строк? имеется список из примерно 90 строк (может быть много больше), нужно сохранить его в...

Элемент управления для List<String>
Привет! Какой элемент управления есть в НЕТ для управления списком строк. Чтобы можно было редактировать, создавать, удалять и...

2
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
18.12.2018, 13:51
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dictionary<string, int> dictionary = new Dictionary<string, int>(Schedule.Count);
            for (int i = 0; i < Schedule.Count; i++)
            {
                var key = GetKey(Schedule[i]);
                dictionary[key] = i;
            }
            foreach (var item in Changes)
            {
                var key = GetKey(item);
                if (dictionary.TryGetValue(key, out int index))
                    Schedule[index] = item;
                else
                {
                    Schedule.Add(item);
                    dictionary[key] = Schedule.Count - 1;
                }
            }
C#
1
2
3
4
5
6
7
8
static string GetKey(string str)
        {
            int pos = str.IndexOf('.');
            if (pos > -1)
                return str.Substring(0, pos);
            else
                return "";
        }
0
70 / 44 / 28
Регистрация: 14.02.2017
Сообщений: 126
18.12.2018, 15:51
Добрый день!

Постепенно и подробно, хотя и неэффективно)))
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Regul2
{
    class Program
    {
        //может и туповато, но искренне
        //объявляем классы
        public class Changes
        {
            public int Number { get; set; }
            public string Lesson { get; set; }
            public string Group { get; set; }
            public int Cab { get; set; }
        }
 
        public class Schedule
        {
            public int Number { get; set; }
            public string Lesson { get; set; }
            public string Group { get; set; }
            public int Cab { get; set; }
        }
 
 
        static void Main(string[] args)
        {
            
            // формируем списки
            List<Changes> change = new List<Changes>()
            {
                new Changes { Number = 1, Lesson = "Философия", Group = "Ш1", Cab = 100 },
                new Changes { Number = 2, Lesson = "Литература", Group = "Ш2", Cab = 200 },
                new Changes { Number = 3, Lesson = "Русский язык", Group = "Ш3", Cab = 300 },
                new Changes { Number = 5, Lesson = "Информатика", Group = "Ш4", Cab = 400 }                
            };
            List<Schedule> schedule = new List<Schedule>()
            {
                new Schedule { Number = 1, Lesson = "Математика", Group = "Ш11", Cab = 100 },
                new Schedule { Number = 6, Lesson = "Физкультура", Group = "Ш2", Cab = 200 },
                new Schedule { Number = 9, Lesson = "Ботаника", Group = "Ш31", Cab = 300 },
                new Schedule { Number = 3, Lesson = "Иностранный", Group = "Ш4", Cab = 400 }
            };
 
 
            //формируем список из элементов change, совпадающих по номеру с элементами schedule - здесь №1 и №3
            var result = from el in change
                         join n in schedule on el.Number equals n.Number
                         select new { Number = el.Number, Lesson = el.Lesson, Group = el.Group, Cab = el.Cab };
            //формируем список из элементов change, отсутствующих в schedule - здесь №2 и №5
            var result1 = from el in change
                          where !(from x in schedule select x.Number).Contains(el.Number)
                          select new { Number = el.Number, Lesson = el.Lesson, Group = el.Group, Cab = el.Cab };
            //формируем список из элементов schedule, отсутствующих в change - здесь №6 и №9
            var result2 = from el in schedule
                          where !(from x in change select x.Number).Contains(el.Number)
                          select new { Number = el.Number, Lesson = el.Lesson, Group = el.Group, Cab = el.Cab };                  
            //объединяем списки и сортируем по порядку номеров
            var total = from m in result.Concat(result1).Concat(result2)
                              orderby m.Number
                              select m;
            //выводим на консоль элементы объединенного списка total
            foreach (var item in total)
                Console.WriteLine($"№{item.Number}. {item.Lesson} {item.Group}|{item.Cab}");
 
            Console.ReadKey();
 
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2018, 15:51
Помогаю со студенческими работами здесь

Сериализация List<string> без переноса строк
Есть класс SettingsList. Мне нужно сериализовать такое вот поле класса: private List&lt;string&gt; serviceToDelete = new...

Передача и принятие объекта List<string> через StreamWriter и StreamReader
Имеется 2 программы: клиент и сервер. Сообщения строковые передаются без проблем, все получается, а вот мне необходимо передать объект...

Объединения двух и более списков объектов по дате
здравствуйте, столкнулся вот с такой проблемой, есть у меня класс, содержащий два свойства DateValue(Дата типа DateTime) и Value (Значение...

Объединение действий двух checkBox
Вот такая ситуация. Есть форма, на ней: - текстовое поле (textBox1); - переключатели типа checkBox (checkBox1 и checkBox2); - кнопка...

Объединение двух *.xls файлов
Здравствуйте, уважаемые формульчане! Возникла проблема с объдинением двух различных *.xls файлов. Задача стоит такая: второй *.xls...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru