Удалить длинные повторы

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Добрый день. Прошу помощи. Как можно сделать так:

Есть список с ссылками
https://w ww.facebook.com/zzzzzzzzzzzz
http://w ww.facebook.com/zzzzzzzzzzzzaaaaaaaaaaaaaaaa
http:// tiktok.com/ssss

Надо найти повторяющиеся домены , в данном случае 2х facebook. И удалить самый длинный из них

Поставил пробелы в ссылках, так как авто меняет на какой-то виджет
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
82
Баллы
28
Регуляркой нужно убирать aaaaaaaaaaaaaaaa, затем удалять в списке ссылок дубли.

Могу сделать.
Мне для этого нужен список из ~10 настоящих ссылок.
По одной буковке убери, чтобы ссылки никуда не вели, но дай настоящие ссылки.
 
  • Спасибо
Реакции: dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Регуляркой нужно убирать aaaaaaaaaaaaaaaa, затем удалять в списке ссылок дубли.

Могу сделать.
Мне для этого нужен список из ~10 настоящих ссылок.
По одной буковке убери, чтобы ссылки никуда не вели, но дай настоящие ссылки.
Заведомо не известны строки ни zzzzzzzzzzzzzz , ни aaaaaaaaaaa, ни домен
Логика такая - поиск на дубли домена и сравнить на длину. Саму длинную - удалить
 
Последнее редактирование:

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
82
Баллы
28
Как я вижу, чтобы искать дубли, поначалу определять длину ссылку придётся.
Вот так я определяю длину переменной content, кладу в переменную length
return project.Variables["content"].Value.Length;
 
  • Спасибо
Реакции: dihard

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
82
Баллы
28
Ну вот шаблончик это делает. Сделан без кода, но работу выполнит.
Для доменов не только com надо во второй части заменить Regex.
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Спасибо большое за решение, но мне нужно в кубик или в пару кубиков. Так как полное выполнение шаблона и так 3 дня, на каждый цикл это очень сильно увеличит время выполнения.
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
C#:
List<string> list = new List<string>(){//список с тестовыми данными
    "https://facebook.com/ssssss",
    "https://www.facebook.com/ssss",
    "http://tik-tok.com/dfjs",
    "http://mail.ru/sdflsdfjsdvlj",
    "http://mail.ru/sdlksldfc"
};
list.OrderByDescending(x=>x.Replace(string.Join("/", x.Split('/').Range("0-2")),"").Length)
    .GroupBy(x=>x.Split('/')[2].Replace("www.",""), x=>x)
    .Where(x=>x.Count() > 1)
    .ToList()
    .ForEach(x=>list.Remove(x.First()));
return string.Join("\n", list);//смотрим, что осталось в списке
1633338004220.png
 
  • Спасибо
Реакции: dihard и Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 469
Благодарностей
8 691
Баллы
113
@Alexmd если такой массив подставить:
C#:
List<string> list = new List<string>(){//список с тестовыми данными
    "https://facebook.com/ssssss",
    "https://www.facebook.com/ssss",
    "https://www.facebook.com/ssssxxxx",
    "http://www.facebook.com/ssssxxxxzzzz",
    "https://www.facebook.com/ssssxxxxzzzzssdfgfg",
    "http://tik-tok.com/dfjs",
    "http://mail.ru/sdflsdfjsdvlj",
    "http://mail.ru/sdlksldfc",
    "https://mail.ru/sdlksldfcerertr"
};
То выдаст такой результат:
83668
 
  • Спасибо
Реакции: dihard и Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
Совершенно верно, соответственно задаче. Не так ли? Я что-то не понимаю? Сниппет должен удалить ссылку с самым длинным хвостом.
 
  • Спасибо
Реакции: dihard и Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 469
Благодарностей
8 691
Баллы
113
Совершенно верно, соответственно задаче. Не так ли? Я что-то не понимаю? Сниппет должен удалить ссылку с самым длинным хвостом.
Да, точно. я не проснулся еще. :-)
 
  • Спасибо
Реакции: dihard и Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
Да, точно. я не проснулся еще. :-)
Я тоже сперва собрал сниппет, который будет чистить от этих длиннющих ссылок, а потом перед публикацией перечитал и переделал)))
Разминка для извилин с утра-пораньше)
 
  • Спасибо
Реакции: dihard

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 469
Благодарностей
8 691
Баллы
113
@Alexmd Я так понял, что из всех ссылок должна остаться самая короткая, в одном экземпляре.
То есть должны остаться:
C#:
https://facebook.com/ssssss (или https://www.facebook.com/ssss если без учета www)
http://tik-tok.com/dfjs
http://mail.ru/sdlksldfc
 
Последнее редактирование:
  • Спасибо
Реакции: dihard

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
@sergodjan66
Надо найти повторяющиеся домены , в данном случае 2х facebook. И удалить самый длинный из них
Формулировка вопросов у некоторых пользователей хромает, но я всегда стараюсь разобраться в написанном, нежели додумывать свое.
:D :D :D
Пожалуйста.
1633340760470.png
 
  • Спасибо
Реакции: dihard и Sergodjan

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
82
Баллы
28
А я так понял, что должны оставаться ссылки без повторов.
У меня шаблон на кубиках из двух одинаковых ссылок удаляет более длинные.

Надо взять мой шаблон и перевести в код, если он выполняет правильную задачу.
 
  • Спасибо
Реакции: dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Всем спасибо ребята!
 

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Совершенно верно, соответственно задаче. Не так ли? Я что-то не понимаю? Сниппет должен удалить ссылку с самым длинным хвостом.
Спасибо за решение, а как сделать, чтобы он не учитывал http или https , или сайт с www или без. Тоесть должен остаться один самый короткий домен facebook или один домен mail.ru
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
Спасибо за решение, а как сделать, чтобы он не учитывал http или https , или сайт с www или без.
По-моему, у меня именно так и сделано. Не важно, какой протокол и не важно с www или без, но протокол должен быть обязательно, так как все завязано на рассплитовке по слэшам.
Тоесть должен остаться один самый короткий домен facebook или один домен mail.ru
А это как раз уже другое условие, которое противоречит изначальному
Логика такая - поиск на дубли домена и сравнить на длину. Саму длинную - удалить
Если надо наоборот, то надо и вопрос задавать по-другому. Оставить самую короткую ссылку для каждого домена.
C#:
List<string> list = new List<string>(){//список с тестовыми данными
    "https://facebook.com/ssssss",
    "https://www.facebook.com/ssss",
    "https://www.facebook.com/ssssxxxx",
    "http://www.facebook.com/ssssxxxxzzzz",
    "https://www.facebook.com/ssssxxxxzzzzssdfgfg",
    "http://tik-tok.com/dfjs",
    "http://mail.ru/sdflsdfjsdvlj",
    "http://mail.ru/sdlksldfc",
    "https://mail.ru/sdlksldfcerertr"
};
List<string> list1 = new List<string>();
list.OrderBy(x=>x.Replace(string.Join("/", x.Split('/').Range("0-2")),"").Length)
    .GroupBy(x=>x.Split('/')[2].Replace("www.",""), x=>x)
    .ToList()
    .ForEach(x=>list1.Add(x.First()));
list.Clear();
list.AddRange(list1);
return string.Join("\n", list);//смотрим, что осталось в списке
Ну и если возникнут трудности при подключении к живому списку проекта, то вот сразу готовый для вставки сниппет. Только имя укажите своего списка.
C#:
var list = project.Lists["Список 1"];
List<string> list1 = new List<string>();
list.OrderBy(x=>x.Replace(string.Join("/", x.Split('/').Range("0-2")),"").Length)
    .GroupBy(x=>x.Split('/')[2].Replace("www.",""), x=>x)
    .ToList()
    .ForEach(x=>list1.Add(x.First()));
list.Clear();
list.AddRange(list1);
 
  • Спасибо
Реакции: vintoss, Koqpe и dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Спасибо)
 
  • Спасибо
Реакции: Alexmd

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