Как найти пересекающиеся значения?

gospodinkot

Client
Регистрация
04.03.2019
Сообщения
82
Благодарностей
22
Баллы
8
Приветствую.
Есть два списка А и Б необходимо найти строки, которые присутствуют в обоих списках и записать их в список В.
Первая мысль это брать каждую строку из списка А и прогонять через функцию "получить строку содержащую текст". Но это больше на костыль похоже. Есть какие-то более оптимизированные способы?
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Ранее задавали вопросы подобные

Воспользуйтесь поиском по форуму (по средствам гугл или яндекс)

site:zennolab.com/discussion/ среднее число из списка
 
  • Спасибо
Реакции: gospodinkot

radv

Client
Регистрация
11.05.2015
Сообщения
3 681
Благодарностей
1 864
Баллы
113
  • Спасибо
Реакции: Чешир и gospodinkot

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
Самый быстрый вариант из всех что тестил:
IZennoList sourceList = project.Lists["SourceList"]; // исходный список
IZennoList blackList = project.Lists["BlackList"]; // чёрный список

List<string> tmpList = sourceList.AsParallel().AsOrdered().Except(blackList.AsParallel()).ToList();
sourceList.Clear();
sourceList.AddRange(tmpList);
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 764
Благодарностей
2 407
Баллы
113
Есть два списка А и Б необходимо найти строки, которые присутствуют в обоих списках и записать их в список В.
https://metanit.com/sharp/tutorial/15.4.php
C#:
// Допустим у нас есть 2 списка с данными и 1 список для хранения результата
List<string> list_A = new List<string>(); // Первый
List<string> list_B = new List<string>(); // Второй
List<string> list_C = new List<string>(); // результат

// Заполняю первый список демо данными
list_A.Add("ZennoLab");
list_A.Add("ZennoPoster");
list_A.Add("CapMonster2");
list_A.Add("user");

// Заполняю второй список демо данными
list_B.Add("ZennoLab");
list_B.Add("ZennoPoster");
list_B.Add("CapMonster2");
list_B.Add("admin");

// 1. Получить список из элементов первого списка, кроме элементов, которые содержатся во втором списке.
// Это разность списков
project.SendWarningToLog("Разность списков",true);
list_C = list_A.Except(list_B).ToList(); // Получить разность списков
list_C.ForEach(x=>project.SendInfoToLog(x)); // Вывожу в лог результат
list_C.Clear(); // очистка списка

// 2. Получить список элементов, которые находятся в первом и во втором списке
// Это пересечение списков
project.SendWarningToLog("Пересечение списков",true);
list_C = list_A.Intersect(list_B).ToList(); // Получить пересечение списков
list_C.ForEach(x=>project.SendInfoToLog(x)); // Вывожу в лог результат
list_C.Clear(); // очистка списка

// 3. Получить список из уникальных элементов двух списков
// Это Объединение списков с удалением дублей
project.SendWarningToLog("Объединение списков с удалением дублей",true);
list_C = list_A.Union(list_B).ToList(); // Объединение списков с удалением дублей
list_C.ForEach(x=>project.SendInfoToLog(x)); // Вывожу в лог результат
list_C.Clear(); // очистка списка

// 4. Получить список из элементов двух списков (без удаления дублей)
// Это Объединение списков без удаления дублей
project.SendWarningToLog("Объединение списков без удаления дублей",true);
list_C = list_A.Concat(list_B).ToList(); // Объединение списков без удаления дублей
list_C.ForEach(x=>project.SendInfoToLog(x)); // Вывожу в лог результат
list_C.Clear(); // очистка списка
78262
 

wdunyushkin

Client
Регистрация
10.07.2020
Сообщения
5
Благодарностей
7
Баллы
3
А мне такой код помог:
C#:
string[] first = File.ReadAllLines(@"C:\Парсер\ZennoPoster\Список1.txt");
string[] second = File.ReadAllLines(@"C:\Парсер\ZennoPoster\Список2.txt");
string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
File.WriteAllLines(@"C:\Парсер\ZennoPoster\Список2.txt", third);

//удаляем в Списке 2 строки что есть в Списке 1
 

gospodinkot

Client
Регистрация
04.03.2019
Сообщения
82
Благодарностей
22
Баллы
8
Спасибо всем! Буду тестить.
Кстати поиск не помог. Я именно это и сделал перед тем как создать тему.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Спасибо всем! Буду тестить.
Кстати поиск не помог. Я именно это и сделал перед тем как создать тему.
Не все умеют правильно создавать заголовки. Можно еще ключи в тему добавить.
 

balytnikov

Client
Регистрация
17.02.2015
Сообщения
27
Благодарностей
8
Баллы
3
Привет) У меня в C# кубике такой код на поиск одинаковых строк в обоих списках и занесение их в третий список:

C#:
var list1 = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
var list3 = list1.Intersect(list2);
project.Lists["Список 3"].AddRange(list3);
Галочку "Не возвращать значение" ставим. Само собой у тебя должно быть создано 3 списка с именами: "Список 1", "Список 2" и "Список 3" (кавычки в названии не нужны).

Ну и дополнительно, может кому пригодится, тоже тут на форуме нашел. Если нужно из Списка 1 вычесть Список 2 и занести все это в Список 3:

C#:
var list1 = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
var list3 = list1.Except(list2);
project.Lists["Список 3"].AddRange(list3);
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)