Сравнение 2-х списков и удаление одинаковых элементов из 2-го списка

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Благодарностей
3
Баллы
18
Всем привет. Есть список 1 и список 2, из второго списка нужно удалить все строки, которые содержат данные из первого. Проще говоря нужно удалить из второго списка все строки которые содержат значения из первого списка. Желательно на C#. Пытался реализовать через кубик, брал строку с первого списка и удалял со второго через взятие строки, но это очень долго, а списки по несколько миллионов строк. Может кто сталкивался с такой проблемой?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 363
Благодарностей
9 095
Баллы
113
Всем привет. Есть список 1 и список 2, из второго списка нужно удалить все строки, которые содержат данные из первого. Проще говоря нужно удалить из второго списка все строки которые содержат значения из первого списка. Желательно на C#. Пытался реализовать через кубик, брал строку с первого списка и удалял со второго через взятие строки, но это очень долго, а списки по несколько миллионов строк. Может кто сталкивался с такой проблемой?
Здесь есть реализация: https://zennolab.com/discussion/threads/rabota-so-spiskami-kak-udalit-dubli.75713/post-508373
 
  • Спасибо
Реакции: Jeka124

mrboogie

Client
Регистрация
28.05.2019
Сообщения
40
Благодарностей
18
Баллы
8
Всем привет. Есть список 1 и список 2, из второго списка нужно удалить все строки, которые содержат данные из первого. Проще говоря нужно удалить из второго списка все строки которые содержат значения из первого списка. Желательно на C#. Пытался реализовать через кубик, брал строку с первого списка и удалял со второго через взятие строки, но это очень долго, а списки по несколько миллионов строк. Может кто сталкивался с такой проблемой?
C#:
/* ВЫЧИТАНИЕ ОДНОГО СПИСКА ИЗ ДРУГОГО
ПОЛЕЗНО ПРИ РЕАЛИЗАЦИИ ЧЁРНОГО СПИСКА */

// Добавить в OwnCode (Общий код) в конце:
/* namespace ZennoHelpers
{
    public class Locker
    {
        public static object CustomListSyncer = new object();
    }
} */

// BlackList - список с игнорируемыеми элементами
List<string> blackList = project.Lists["BlackList"].ToList();

 // SourceList - исходный список
List<string> sourceList = project.Lists["SourceList"].ToList();

// ResultList - результат вычитания исходного списка и чёрного списка
IZennoList resultList = project.Lists["ResultList"];

lock(ZennoHelpers.Locker.CustomListSyncer)
{
    List<string> exclude = new List<string>();
    exclude = sourceList.Except(blackList).ToList();
    resultList.AddRange(exclude);
}
 
  • Спасибо
Реакции: Jeka124

username666

Client
Регистрация
20.03.2020
Сообщения
211
Благодарностей
89
Баллы
28
C#:
List<string> bad = project.Lists["стоплист"].ToList();//стопслова
List<string> mix = project.Lists["все в куче"].ToList();//потенциальные счастливцы
var good =project.Lists["листсчастья и печенек"];//те, кото будем осчастливливать точно
List<string> kostyl = new List<string>();//важный элемент индусского кода
//блок очень сложного индусского кода
kostyl=mix.Except(bad).ToList();
foreach(string data in kostyl)
{good.Add(data);}
 
  • Спасибо
Реакции: Apostol и Jeka124

ilyalidam

Client
Регистрация
17.10.2020
Сообщения
6
Благодарностей
2
Баллы
3
Вот хорошо отрабатывает на больших списках + не удаляет дубли
C#:
var bad = project.Lists["unsubscribe"].ToList();//стопслова
var mix = project.Lists["emails"].ToList();//потенциальные счастливцы
bad.Sort();
List <string> good = new List<string>();
foreach (var item in mix) {
    int l = 0, r = bad.Count();
    while (l + 1 < r) {
        int d = (l + r) / 2;
        if (string.Compare(bad[d], item) <= 0) l = d; else r = d;
    }
    if (bad[l] == item) continue;
    good.Add(item);
}
var eer = project.Lists["emails"];
eer.Clear();
eer.AddRange(good);
 

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