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

SteveJobs

Client
Joined
Nov 3, 2016
Messages
283
Reaction score
30
Points
28
Есть список с аккаунтами и там же прокси. И есть отдельный список с прокси, нужно сравнить список с прокси и список аккаунтов с прокси на наличие одинаковых прокси и записать уникальный в другой список. Такой код иногда пропускает дубли
Code:
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
Joined
Dec 28, 2018
Messages
734
Reaction score
343
Points
63
Почему Contains, а не разбить по разделителю и проверить на точное вхождение?
 

SteveJobs

Client
Joined
Nov 3, 2016
Messages
283
Reaction score
30
Points
28
Почему Contains, а не разбить по разделителю и проверить на точное вхождение?
Не совсем понимаю как имеется ввиду. Есть ещё такой вариант, не пойму какой менее прожорлив к ресурсам
Code:
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
Joined
Dec 28, 2018
Messages
734
Reaction score
343
Points
63
Не совсем понимаю как имеется ввиду
примеры напишите, пока не очень понятно, как у вас записано, может быть user:pass@proxy:port, может ещё как-то, без примеров сказать сложно.
Например, 192.168.0.1:8087 адерс 2.168.0.1:8087 по Contains будет найден, так же и с портом 92.168.0.1:80 , поэтому лучше сравнивать целую строку, откинув лишнее.
 

SteveJobs

Client
Joined
Nov 3, 2016
Messages
283
Reaction score
30
Points
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
Joined
Dec 28, 2018
Messages
734
Reaction score
343
Points
63
просто знать бы менее прожорливый вариант
Code:
string str = null;
string[] strArr = null;
str = "qwerty:123:321||192.168.0.1:8087||";
char[] splitchar = { '||' };
strArr = str.Split(splitchar);
и т.д. нужно создать единый список прокси без профилей.

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

Code:
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);
По прожорливости не проверял, сказать не могу, но один из самых быстрых.
 
  • Thank you
Reactions: SteveJobs

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)