#c# #.net
#c# #.net
Вопрос:
for (int i = 0; i < ExtractLinks.FilteredLinks.Count; i )
{
for (int x = 0; x < lockedLinks.Count; x )
{
if (ExtractLinks.FilteredLinks[i].Contains(lockedLinks[x]))
{
string h = "found";
}
}
}
Я хочу проверить, существует ли одна и та же ссылка в обоих списках.
FilteredLinks и lockedLinks оба типа List
Я использовал точку останова, и в FilteredLink я увидел эту ссылку, например:
http://rotter.net/forum/scoops1/112341.shtml
И в lockedLinks эта ссылка:
http://rotter.net/cgi-bin/forum/dcboard.cgi?az=read_countamp;om=112341amp;forum=scoops1
Обе ссылки ведут на одну и ту же страницу. Так что это означает, что оба они одинаковы.
Итак, в этом случае оно должно остановиться в точке останова, которую я добавил: строка h = «найдена»;
Но поскольку это никогда не останавливается на достигнутом, я предполагаю, что что-то не так с моим условием IF.
В случае, если это было обнаружено, я хочу удалить ссылку из FilteredLinks, а также из lockedLinks, чтобы удалить то, что предположительно является одинаковыми ссылками из обоих списков. Ссылки не идентичны по адресу, но они ведут на одну и ту же страницу, поэтому я считаю их одинаковыми / идентичными, и их обе следует удалить.
Комментарии:
1. Я полагаю, что ваш собственный вопрос отвечает на это…-
2. Они не совпадают.
3. Учитывая, что две ссылки разные, почему оно должно разрешаться одинаково в contains’?
4. Ссылки не идентичны, но поскольку обе имеют внутри номер 112341, то они ведут на одну и ту же страницу, поэтому я считаю их идентичными и их следует удалить.
5. Тогда почему бы не записать эту логику в свой код?
Ответ №1:
Если вы знаете формат uri, вы можете извлечь идентификатор из разных типов uri и сравнить их:
private static string GetArticleIdFiltered(string filtered)
{
var uri = new Uri(filtered);
return Path.GetFileNameWithoutExtension(uri.LocalPath);
}
private static string GetArticleIdLocked(string locked)
{
var uri = new Uri(locked);
var queryParams = HttpUtility.ParseQueryString(uri.Query);
return queryParams["om"];
}
for (int x = 0; x < lockedLinks.Count; x )
{
var lockedArticle = GetArticleIdLocked(lockedLinks[x]);
var filteredId = GetArticleIdFiltered(ExtractLinks.FilteredLinks[i]);
if (lockedArticle == filteredId)
{
string h = "found";
}
}
Если вы знаете, что идентификатор всегда числовой, вы можете проанализировать его более точно и сравнить целые числа вместо строк.