Запись уникального текста C#

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
Есть список с аккаунтами и там же прокси. И есть отдельный список с прокси, нужно сравнить список с прокси и список аккаунтов с прокси на наличие одинаковых прокси и записать уникальный в другой список. Такой код иногда пропускает дубли
Код:
var list = project.Lists["Accs"];
var needle = project.Variables["proxy"].Value;
var sourceList = project.Lists["Reserv_Proxy"];
lock (CommonCode.ProxyFolder){
foreach(string data in list)
{
if(data.Contains(needle))
{return 1;}
}
sourceList.Add(needle);
return 0;
}
 

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
Почему Contains, а не разбить по разделителю и проверить на точное вхождение?
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
Почему Contains, а не разбить по разделителю и проверить на точное вхождение?
Не совсем понимаю как имеется ввиду. Есть ещё такой вариант, не пойму какой менее прожорлив к ресурсам
Код:
var textContains = project.Variables["proxy"].Value;
var sourceList = project.Lists["Accs"];
var source1List = project.Lists["Reserv_Proxy"];

    for(int i=0; i < sourceList.Count; i++)
    {
        var str = sourceList[i];
        if (str.Contains(textContains))
        {   
             //sourceList.RemoveAt(i);
             i--;       
        return 1;
        }
    }
    source1List.Add(textContains);
    return 0;
 

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
Не совсем понимаю как имеется ввиду
примеры напишите, пока не очень понятно, как у вас записано, может быть user:pass@proxy:port, может ещё как-то, без примеров сказать сложно.
Например, 192.168.0.1:8087 адерс 2.168.0.1:8087 по Contains будет найден, так же и с портом 92.168.0.1:80 , поэтому лучше сравнивать целую строку, откинув лишнее.
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
примеры напишите, пока не очень понятно, как у вас записано, может быть user:pass@proxy:port, может ещё как-то, без примеров сказать сложно.
Например, 192.168.0.1:8087 адерс 2.168.0.1:8087 по Contains будет найден, так же и с портом 92.168.0.1:80 , поэтому лучше сравнивать целую строку, откинув лишнее.
qwerty:123:321||192.168.0.1:8087||
Прим такого совпадения у меня нет как Вы описали, по contains устроит, просто знать бы менее прожорливый вариант
 

specialist

Client
Регистрация
28.12.2018
Сообщения
732
Благодарностей
343
Баллы
63
просто знать бы менее прожорливый вариант
Код:
string str = null;
string[] strArr = null;
str = "qwerty:123:321||192.168.0.1:8087||";
char[] splitchar = { '||' };
strArr = str.Split(splitchar);
и т.д. нужно создать единый список прокси без профилей.

Далее читаем оба списка (прокси которые есть, общий список прокси) и делаем вычитание массива, через Except

Код:
int[] arr1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] arr2 = { 6, 7, 8, 9 };

IEnumerable<int> nums = arr1.Except<int>(arr2);

foreach (int i in nums)
        Console.WriteLine(i);
По прожорливости не проверял, сказать не могу, но один из самых быстрых.
 
  • Спасибо
Реакции: SteveJobs

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