Быстро проверить, есть ли данная строка в большом списке

alex1sv

Client
Регистрация
04.02.2014
Сообщения
9
Благодарностей
0
Баллы
1
Такая ситуация: парсим ID юзеров и складываем в большой файл 1.

НО, есть еще один большой файл 2 - юзеры, которых уже обработали в другом проекте, их в файл 1 класть не нужно.

Есть ли способ проверить, не создавая цикл, присутствует ли текущий юзер в файле 2?

Вот чем-то родственнным, вроде бы, является, "удалить строку из списка по значению", быстро и удобно. Думал его использовать как-то, но не додумался, как это сделать (т.к. эта операция возвращает успех в любом случае, вне зависимости от того, попался ли юзер в списке и был ли действительно удален)


P.S. на данный момент решаем это так: пишем в файл 1 все подряд, а после парсинга берем файл 2 и в цикле построчно удаляем из файла 1 все совпадения. Но это делается долго, а в перспективе будет совсем долго (по мере роста файлов).
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 462
Благодарностей
8 686
Баллы
113
можно файл 2 поместить в список, объединить строки списка, соответственно положить в переменную и искать в этой переменной вхождение, если вхождение найдено, то соотв. не кладем данные в файл 1..
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
891
Баллы
113
сделайте на сниппете - цикл все равно будет, но шустрый и не заметный))))
В общем id - это id хомяка
Список 2 - список с отработанными хомяками

В данном случае идет проверка нового id во втором списке

Код:
var list = project.Lists["Список 2"];
string id = project.Variables["id"].Value;
foreach(string data in list)
{
if(data.Contains(id))
return true;
}
return false;
А вот этим сниппетом можно будет почистить все что уже напарсилось в 1 список)))

Код:
var list = project.Lists["Список 1"];
var list2 = project.Lists["Список 2"];
for(int i =list1.Count-1;i>=0;i--)
{
foreach(string data in list2)
{
if(list[i].Contains(data))
{
list.RemoveAt(i);
continue;
}
}
}
return 0;
Вроде оба должны работать) будут косячить - пишите)
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
P.S. на данный момент решаем это так: пишем в файл 1 все подряд, а после парсинга берем файл 2 и в цикле построчно удаляем из файла 1 все совпадения. Но это делается долго, а в перспективе будет совсем долго (по мере роста файлов).
Долго это в PM, потому что работа шаблона сопровождается анимацией
В ZP все эти операции выполняются почти мгновенно.
 
  • Спасибо
Реакции: Grek

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