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

Discussion in 'Вопросы новичков' started by SteveJobs, Mar 16, 2019 at 10:30 AM.

  1. SteveJobs

    SteveJobs Client

    Joined:
    Nov 3, 2016
    Messages:
    259
    Likes Received:
    26
    Есть список с аккаунтами и там же прокси. И есть отдельный список с прокси, нужно сравнить список с прокси и список аккаунтов с прокси на наличие одинаковых прокси и записать уникальный в другой список. Такой код иногда пропускает дубли
    Code (text):
    1. var list = project.Lists["Accs"];
    2. var needle = project.Variables["proxy"].Value;
    3. var sourceList = project.Lists["Reserv_Proxy"];
    4. lock (CommonCode.ProxyFolder){
    5. foreach(string data in list)
    6. {
    7. if(data.Contains(needle))
    8. {return 1;}
    9. }
    10. sourceList.Add(needle);
    11. return 0;
    12. }
     
  2. specialist

    specialist Client

    Joined:
    Dec 28, 2018
    Messages:
    195
    Likes Received:
    55
    Почему Contains, а не разбить по разделителю и проверить на точное вхождение?
     
  3. SteveJobs

    SteveJobs Client

    Joined:
    Nov 3, 2016
    Messages:
    259
    Likes Received:
    26
    Не совсем понимаю как имеется ввиду. Есть ещё такой вариант, не пойму какой менее прожорлив к ресурсам
    Code (text):
    1. var textContains = project.Variables["proxy"].Value;
    2. var sourceList = project.Lists["Accs"];
    3. var source1List = project.Lists["Reserv_Proxy"];
    4.  
    5.     for(int i=0; i < sourceList.Count; i++)
    6.     {
    7.         var str = sourceList[i];
    8.         if (str.Contains(textContains))
    9.         {  
    10.              //sourceList.RemoveAt(i);
    11.              i--;      
    12.         return 1;
    13.         }
    14.     }
    15.     source1List.Add(textContains);
    16.     return 0;
    17.  
    18.  
     
  4. specialist

    specialist Client

    Joined:
    Dec 28, 2018
    Messages:
    195
    Likes Received:
    55
    примеры напишите, пока не очень понятно, как у вас записано, может быть user:[email protected]:port, может ещё как-то, без примеров сказать сложно.
    Например, 192.168.0.1:8087 адерс 2.168.0.1:8087 по Contains будет найден, так же и с портом 92.168.0.1:80 , поэтому лучше сравнивать целую строку, откинув лишнее.
     
  5. SteveJobs

    SteveJobs Client

    Joined:
    Nov 3, 2016
    Messages:
    259
    Likes Received:
    26
    qwerty:123:321||192.168.0.1:8087||
    Прим такого совпадения у меня нет как Вы описали, по contains устроит, просто знать бы менее прожорливый вариант
     
  6. specialist

    specialist Client

    Joined:
    Dec 28, 2018
    Messages:
    195
    Likes Received:
    55
    Code (text):
    1. string str = null;
    2. string[] strArr = null;
    3. str = "qwerty:123:321||192.168.0.1:8087||";
    4. char[] splitchar = { '||' };
    5. strArr = str.Split(splitchar);
    6.  
    и т.д. нужно создать единый список прокси без профилей.

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

    Code (text):
    1. int[] arr1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    2. int[] arr2 = { 6, 7, 8, 9 };
    3.  
    4. IEnumerable<int> nums = arr1.Except<int>(arr2);
    5.  
    6. foreach (int i in nums)
    7.         Console.WriteLine(i);
    По прожорливости не проверял, сказать не могу, но один из самых быстрых.
     
    SteveJobs likes this.

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)