Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538

Сравнить 2 листа

19.06.2013, 03:19. Показов 2902. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи-утра всем. Глупый наверно вопрос... Вообщем допустим у нас есть 2 List<string>. Нам надо сначала добавить недостающие записи из list2 в list1, а потом из list1 удалить записи, которых нет в list2. В голову ничего кроме банального поочерёдного прохода по значениям листа не пришло, нет ли более гуманного способа?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.06.2013, 03:19
Ответы с готовыми решениями:

Перебор содержимого LIST<>: попарно сравнить все элементы листа исключая возможность повторения
Задача такова. В листе хранятся адреса файлов, есть отдельный метод сравнения этих файлов. Необходимо попарно сравнить все элементы листа...

Как сравнить значения ComboBox и листа ячейки, если одинаковые вывод сообщения, если разные сравнить с ячейкой ниже
Добрый день. Как сравнить значения ComboBox и значения ячейки на листе, если одинаковые вывод сообщения, если разные сравнить с ячейкой...

Сохранение текущего листа с сохранением имени листа и присвоением новой книге имени текущего листа
Sub Save_as() With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = ThisWorkbook.Path &amp; &quot;\&quot; &amp; &quot;new book name&quot;...

16
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
19.06.2013, 03:34
Вроде нет.
foreach в руки и пошел
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
19.06.2013, 03:43  [ТС]
Нашёл Except. Теперь лучшая идея в голове добавить в первый из второго всё что не встречается через if, а потом удалить всё что скажет Except.

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
            foreach (string str in list2)
            {
                if (!list1.Contains(str))
                {
                    list1.Add(str);
                }
            }
            foreach (string str in list1.Except(list2).ToList())
            {
                list1.Remove(str);
            }
Если кто предложит чего получше, буду очень благодарен.

Добавлено через 3 минуты
Посмотрел на код, в голову пришло
C#
1
2
3
4
5
6
7
8
            foreach (string str in list2.Except(list1).ToList())
            {
                list1.Add(str);
            }
            foreach (string str in list1.Except(list2).ToList())
            {
                list1.Remove(str);
            }
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
19.06.2013, 06:16
Цитата Сообщение от phantom96 Посмотреть сообщение
Нам надо сначала добавить недостающие записи из list2 в list1, а потом из list1 удалить записи, которых нет в list2.
Тут по подробней расскажи, а то получается если ты все записи из лист2 добавишь в лист1, то удалять там нечего будет.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
19.06.2013, 07:21
Цитата Сообщение от Neal Посмотреть сообщение
Вроде нет.
есть, System.Collections.Generic.SortedSet<T>
0
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
19.06.2013, 10:23
Цитата Сообщение от phantom96 Посмотреть сообщение
Нашёл Except. Теперь лучшая идея в голове добавить в первый из второго всё что не встречается через if, а потом удалить всё что скажет Except.
Создай еще один List<string>.
В него записывай нужные данные.
Потому что, если использовать foreach для одного списка, и тут же добавлять в него данные, то Exception обеспечен.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.06.2013, 10:39
Лучший ответ Сообщение было отмечено как решение

Решение

phantom96,
C#
1
2
var newlist2 = list1.Union(list2);
var newlist1 = list1.Intersect(list2);
4
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
19.06.2013, 12:09  [ТС]
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
Тут по подробней расскажи, а то получается если ты все записи из лист2 добавишь в лист1, то удалять там нечего будет.
Мне из лист1 надо удалить то чего нет в лист2.

Добавлено через 1 минуту
Цитата Сообщение от Neal Посмотреть сообщение
Создай еще один List<string>.
В него записывай нужные данные.
Потому что, если использовать foreach для одного списка, и тут же добавлять в него данные, то Exception обеспечен.
Почему обеспечен? Сделал 2 листа по 100 000 значений, всё прошло нормально.

Добавлено через 10 минут
Цитата Сообщение от Psilon Посмотреть сообщение
phantom96,
C#
1
2
var newlist2 = list1.Union(list2);
var newlist1 = list1.Intersect(list2);
Psilon, а можно как-то не используя новые листы. Я сейчас только понял что "немного" неправильно объяснил что мне нужно... Лист нужен для привязки к ЛистБоксу, в него периодически поступают новые данные, я хочу обновлять эти данные без потери выделения текущих.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
19.06.2013, 12:43
Цитата Сообщение от Neal Посмотреть сообщение
Потому что, если использовать foreach для одного списка, и тут же добавлять в него данные, то Exception обеспечен.
Цитата Сообщение от phantom96 Посмотреть сообщение
Почему обеспечен? Сделал 2 листа по 100 000 значений, всё прошло нормально.
Имелось в виду это
C#
1
2
3
List<int> ints = Enumerable.Range(0, 10).ToList<int>();
foreach (int i in ints)
    ints.Add(i * i);  // System.InvalidOperationException: коллекция была изменена
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
19.06.2013, 14:12  [ТС]
Ну так у меня условие не на элементах коллекции держится.
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
19.06.2013, 15:26
phantom96, я все равно понять не могу, что именно надо.
Вообщем допустим у нас есть 2 List<string>. Нам надо сначала добавить недостающие записи из list2 в list1, а потом из list1 удалить записи, которых нет в list2.
лист1 - 1 2 3 4 5 6
лсит2 - 5 6 7 8 9 10

Делаем то, что ты хочешь:
1. лист1 - 1 2 3 4 5 6 7 8 9 10 ( добавляем недостающие записи из лист2 в лист1 )
2. лист1 - 5 6 7 8 9 10 ( удаляем из лист1 записи которых нету в лист2 )

Тут видно что получим обратно лист2, мб я что-то не так понимаю...
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
19.06.2013, 16:55
Цитата Сообщение от Psilon Посмотреть сообщение
var newlist2 = list1.Union(list2);
var newlist1 = list1.Intersect(list2);
самое интересное, что эти алгоритмы работают быстрее, чем те же set_intersection, set_union из stl(C++) где-то в 3-4 раза
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
19.06.2013, 17:20  [ТС]
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
phantom96, я все равно понять не могу, что именно надо.

лист1 - 1 2 3 4 5 6
лсит2 - 5 6 7 8 9 10

Делаем то, что ты хочешь:
1. лист1 - 1 2 3 4 5 6 7 8 9 10 ( добавляем недостающие записи из лист2 в лист1 )
2. лист1 - 5 6 7 8 9 10 ( удаляем из лист1 записи которых нету в лист2 )

Тут видно что получим обратно лист2, мб я что-то не так понимаю...
Да, в итоге получится list2, но я немогу просто очистить list1 и поставить туда list2. list1 у меня цель биндинга листбокса и если его очищать все элементы обновляются и выделение тоже сбрасывается. Я хочу избежать этого. Вот и причина цирка)
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
19.06.2013, 17:24
Весь этот 'цирк' можно обойти куда более изящным способом, кидай код, проект, что там у тебя еще есть, говори как должно работать и там уже попробуем разобраться.
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
19.06.2013, 17:31  [ТС]
Зачем код и проект? Это всё легко можно проверить создав новый проект. Делаем 2 листа. В первый прописываем значения: (123, 456, 789), в другой (456, 789, 101). И кнопочку которая нам второй в первый превратит. При этом первый должен отображаться в ListBox,e и выделение с 456 уходить не должно. Вот на чём тренировался.
Вложения
Тип файла: rar testList.rar (54.0 Кб, 7 просмотров)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
19.06.2013, 17:32
Цитата Сообщение от phantom96 Посмотреть сообщение
листбокс
а почему не ListView в виртуальном режиме? в листбох то долго биндятся данные, особенно 100 000
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
20.06.2013, 13:09  [ТС]
100 000 было для проверки, в рабочем режиме 2х5 записей, не больше и обновление раз в секунду.

Добавлено через 19 часов 36 минут
Сюда можно больше не смотреть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2013, 13:09
Помогаю со студенческими работами здесь

Запуск макроса (написанного для актив. нужного листа) с др. листа (сложно)
Подскажите пожалуйста, есть большие макросы которые работают на активном листе, существует какой-то способ не прописывая везде нужный лист...

Сохранение листа книги в файле - проблема с защитой листа и привязкой макросов
С толкнулся с такой проблемой при сохранении листа в файле вот код который сохраняет лист в файле Sub red_row() ...

Перенос значений с одного листа в разные ячейки второго листа
прошу помощи, форумчане. Перед нами была поставлена задача оптимизировать наши расчеты. Суть оптимизации - на листе &quot;данные&quot;...

В ячейке B2 второго листа вывести значение ячейки A1 первого листа
Необходимо чтобы, например, в ячейке B2 второго листа автомотически вводилось значение ячейки A1 первого листа.

Считать данные с листа EXCEL в Listview. Выбор листа в Combobox
Как считать с листа Excel - где его имя - выбранное значение из combobox. Если я правильно понял то это событие ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru