Mon*_*RPG 2 c# wpf element contains list
我正在为产品销售网站编写自己的特定网络爬虫.由于它们的编码性质非常糟糕,我得到的网址指向同一页面.
例一
http://www.hizlial.com/bilgisayar/bilgisayar-bilesenleri/bilgisayar/yazicilar/samsung-scx-3200-tarayici-fotokopi-lazer-yazici_30.033.1271.0043.htm
Run Code Online (Sandbox Code Playgroud)
例如,上面的页面与下面相同
http://www.hizlial.com/bilgisayar-bilesenleri/bilgisayar/yazicilar/samsung-scx-3200-tarayici-fotokopi-lazer-yazici_30.033.1271.0043.htm
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当您通过'/'
角色分割时,它包含2个"bilgisayar"元素
所以我想要的是我想分割这样的网址
string[] lstSPlit = srURL.Split('/');
Run Code Online (Sandbox Code Playgroud)
之后检查该列表是否包含多次相同的元素.任何元素.如果包含任何元素,我将跳过网址,因为我已经有从其他页面提取的真实网址.那么这样做的最佳方式是什么?
更长但工作的版本
string[] lstSPlit = srHref.Split('/');
bool blDoNotAdd = false;
HashSet<string> splitHashSet=new HashSet<string>();
foreach (var vrLstValue in lstSPlit)
{
if (vrLstValue.Length > 1)
{
if (splitHashSet.Contains(vrLstValue) == false)
{
splitHashSet.Add(vrLstValue);
}
else
{
blDoNotAdd = true;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
if (list.Distinct().Count() < list.Count)
Run Code Online (Sandbox Code Playgroud)
这应该比分组更快.(我没有测量过)
您可以通过编写自己的扩展方法将项目添加到a,HashSet<T>
并在返回false时立即Add()
返回false,从而使其更快.
你甚至可以使用邪恶的速记来做到这一点:
if (!list.All(new HashSet<string>().Add))
Run Code Online (Sandbox Code Playgroud)