可能重复:
检查列表是否已包含项目?
for (int i = 0; i < webSites.Count(); i++)
{
string t = webSites[i];
webCrawler(t, levels - 1);
// csFiles.add
}
MessageBox.Show(webSites.Count().ToString());
return csFiles;
Run Code Online (Sandbox Code Playgroud)
让我们在网站上说:
www.google.com
www.microsoft.com
现在在第二级让我们再说www.google.com再次存在,所以这次我不想处理它来做recrusive如果它会再做同样的事情.我需要以某种方式制作或检查它是否会执行每个链接一次.我怎么检查它?
我不需要检查列表中是否已经存在该项目我需要检查它是否已经存在所以不要再这样做,因为它将再次挖掘相同的链接并重复它自己.
不要使用名单这一点-使用Hashset<string>-这有望O(1)查找时间,而不是为O(n)的名单,真正的"设置"比喻完全符合:
HashSet<string> visitedPages = new HashSet<string>();
for (int i = 0; i < webSites.Count(); i++)
{
string page = webSites[i];
if(visitedPages.Add(page)) //returns true if new page was added
{
webCrawler(page, levels - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
如果以递归方式调用此方法,则visitedPages哈希集的声明当然必须在方法之外,例如,使其成为成员变量,以便您可以维护访问页面的历史记录.
| 归档时间: |
|
| 查看次数: |
8832 次 |
| 最近记录: |