Черный список

FreddyKrueger

Client
Регистрация
06.09.2016
Сообщения
653
Благодарностей
466
Баллы
63
Тема "черный список" неоднократно обсуждалась на форуме, но пока я не нашел рабочего решения под мои задачи.

Имеется 2 списка:
1) ID всех друзей аккаунта
2) Черный список, куда добавляются ID юзеров, которым уже было отправлено сообщение.
Задача: удалять ID, содержащиеся в списке 2, из списка 1.

Пробовал сниппеты:
//Списки проекта
var baseEmails = project.Lists["baseEmails"];
var blackList = project.Lists["blackList"];
// проверяем каждую строку
//Лочим для многопотока
lock(SyncObjects.ListSyncer)
{
foreach(string s in blackList)
{
//Ищем в основном списке
for(int i = 0; i < baseEmails.Count; i++)
{
//Если нашли, удаляем
string check = baseEmails;
if(check.Contains(s))
baseEmails.RemoveAt(i);
}
}
}

IZennoList list = project.Lists["id друзей"];
IZennoList list2 = project.Lists["черный список"];

List<string> tmpList = new List<string>();
tmpList = list.Except(list2).ToList();
list.Clear();
list.AddRange(tmpList);

Они в принципе не работают, список 1 не чистится, от значений списка 2.

Пробовал стандартными экшенами, вот такую простую схему:

1. получаем строку черного списка по номеру строки
2. удаляем из основного списка "строку со значением" записи черного списка
3. плюсуем номер строки черного списка
4. продолжаем циклы пока не закончатся строки в черном списке
Итог:
*Если использовать "удалить строки со значением" то записи со списка 1 вообще не удаляются.
*Если использовать "удалить строки содержащие текст", то удаляются все строки списка 1.

Для каждого аккаунта - свой список друзей привязанный к файлу, и общий черный список. Мб поэтому ранее перечисленные варианты не работают.

Есть еще 1 вариант https://zennolab.com/discussion/threads/shablon-po-avito-kak-realizovat-rassylku-v-soobschenija-bez-povtorenij.35322/#post-262611 Но для большого количества записей (более 10 000 ID друзей с 1 аккаунта, и 50 000+ id черного списка) - это явно не подходит.

Возможно я что то делаю не так, или есть другие варианты в c# ?
 

FreddyKrueger

Client
Регистрация
06.09.2016
Сообщения
653
Благодарностей
466
Баллы
63
актуально
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 102
Баллы
113
C#:
IZennoList baseEmails = project.Lists["baseEmails"];
IZennoList blackList = project.Lists["blackList"];

lock (SyncObjects.ListSyncer) {
    foreach (string s in blackList) {
        for (int i = 0; i < baseEmails.Count; i++) {
            if (baseEmails[i] == s) {
                baseEmails.RemoveAt(i);
                i--;
            }
        }
    }
}
C#:
IZennoList list = project.Lists["id друзей"];
IZennoList list2 = project.Lists["черный список"];

lock (SyncObjects.ListSyncer) {
    List<string> tmpList = new List<string>();
    tmpList = list.Except(list2).ToList();
    list.Clear();
    list.AddRange(tmpList);
}
 
  • Спасибо
Реакции: GSX_RU и FreddyKrueger

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