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

  • Автор темы Автор темы Jeka124
  • Дата начала Дата начала

Jeka124

Client
Регистрация
19.09.2020
Сообщения
122
Реакции
3
Баллы
18
Всем привет. Есть список 1 и список 2, из второго списка нужно удалить все строки, которые содержат данные из первого. Проще говоря нужно удалить из второго списка все строки которые содержат значения из первого списка. Желательно на C#. Пытался реализовать через кубик, брал строку с первого списка и удалял со второго через взятие строки, но это очень долго, а списки по несколько миллионов строк. Может кто сталкивался с такой проблемой?
 
Всем привет. Есть список 1 и список 2, из второго списка нужно удалить все строки, которые содержат данные из первого. Проще говоря нужно удалить из второго списка все строки которые содержат значения из первого списка. Желательно на C#. Пытался реализовать через кубик, брал строку с первого списка и удалял со второго через взятие строки, но это очень долго, а списки по несколько миллионов строк. Может кто сталкивался с такой проблемой?
Здесь есть реализация: https://zennolab.com/discussion/threads/rabota-so-spiskami-kak-udalit-dubli.75713/post-508373
 
  • Спасибо
Реакции: Jeka124
Всем привет. Есть список 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
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
Вот хорошо отрабатывает на больших списках + не удаляет дубли
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);
 

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