C# 如何从列表中删除<;字符串>;包含url';在url';s
我有以下代码:C# 如何从列表中删除<;字符串>;包含url';在url';s,c#,C#,我有以下代码: private void button6_Click(object sender, EventArgs e) { crawlLocaly1 = new CrawlLocaly(); crawlLocaly1.StartPosition = FormStartPosition.CenterParent; DialogResult dr = crawlLocaly1.ShowDialog(this); if (dr == DialogResult.Ca
private void button6_Click(object sender, EventArgs e)
{
crawlLocaly1 = new CrawlLocaly();
crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
DialogResult dr = crawlLocaly1.ShowDialog(this);
if (dr == DialogResult.Cancel)
{
crawlLocaly1.Close();
}
else if (dr == DialogResult.OK)
{
LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);
crawlLocaly1.Close();
}
}
private void removeExternals(List<string> externals)
{
}
当用户单击按钮6时,它会打开一个带有文本框的新表单,用户可以键入一个关键字,该关键字可以是url,也可以只是一个单词。
当用户单击“确定”时,它正在执行以下操作:
LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);
LocalyKeyword是一个列表,而crawlLocaly1是一个新表单,我从中获取用户在文本框中键入的文本
mainUrl是当前的url
例如,如果mainUrl是
用户输入:Daniel
所以在索引0中的LocalyKeyWords列表中,我将看到:Daniel,http://www.google.com
所以我知道Daniel这个关键词属于
现在我有了这个代码:
private void button6_Click(object sender, EventArgs e)
{
crawlLocaly1 = new CrawlLocaly();
crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
DialogResult dr = crawlLocaly1.ShowDialog(this);
if (dr == DialogResult.Cancel)
{
crawlLocaly1.Close();
}
else if (dr == DialogResult.OK)
{
LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);
crawlLocaly1.Close();
}
}
private void removeExternals(List<string> externals)
{
}
private void removeExternals(列出外部)
{
}
现在用户可以随时更改和设置mainUrl。
我需要在函数removeExternals中检查mainUrl是什么,然后在列表LocalyKeyWords中查找url,然后从列表外部删除属于LocalyKeyWords中url的关键字的所有位置
例如,mainUrl现在是
所以我需要找到关键字属于什么
例如,关键字是Daniel:Daniel,http://www.google.com
因此,现在删除包含关键字Daniel的外部列表中的所有位置,正如其他人所说,在这里查找或词典可能是最好的。如果你使用字典:
//Declaration. This will map a Url to one or more keywords.
Dictionary<string, List<string>> LocalyKeyWords = new Dictionary<string, List<string>>();
...
//Adding an item.
if(LocalyKeyWords.ContainsKey(mainUrl)
{
LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
}
else
{
LocalyKeyWords.Add(mainUrl, new List<string>(new string[] { crawlLocaly1.getText() } ));
}
...
private void removeExternals(List<string> externals)
{
if(!LocalyKeyWords.ContainsKey(mainUrl))
{
return;
}
List<string> keywords = LocalyKeyWords[mainUrl];
List<int> indices = new List<int>();
foreach(string keyword in keywords)
{
//Accumulate a list of the indices of the items that match.
indices = indices.Concat(externals.Select((v, i)
=> v.Contains(keyword) ? i : -1 )).ToList();
}
//Filter out the -1s, grab only the unique indices.
indices = indices.Where(i => i >= 0).Distinct().ToList();
//Filter out those items that match the keyword(s) related to mainUrl.
externals = externals.Where((v, i) => !indices.Contains(i)).ToList();
}
//声明。这将把Url映射到一个或多个关键字。
字典LocalyKeyWords=新字典();
...
//添加项目。
if(LocalyKeyWords.ContainsKey(mainUrl)
{
LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
}
其他的
{
Add(mainUrl,新列表(新字符串[]{crawlLocaly1.getText()}));
}
...
私有void removeExternals(列出外部)
{
如果(!LocalyKeyWords.ContainsKey(mainUrl))
{
返回;
}
列表关键字=LocalyKeyWords[mainUrl];
列表索引=新列表();
foreach(关键字中的字符串关键字)
{
//累积匹配项的索引列表。
index=index.Concat(externals.Select((v,i)
=>v.Contains(关键字)?i:-1)).ToList();
}
//过滤掉-1,只获取唯一的索引。
index=index.Where(i=>i>=0.Distinct().ToList();
//筛选出与mainUrl相关的关键字匹配的项目。
externals=externals.Where((v,i)=>!index.Contains(i)).ToList();
}
这应该可以做到,但我不是100%确定你的目标。听起来你应该使用
字典NickW来了解你在removeExternals中的代码,行中是:index=index.Concat(externals.Select((v,I)=>v.Contains(k)?I:-1)).ToList();变量k不存在。它应该是什么来代替k?NickW我的目标是:在外部,我有一个许多url的列表。例如,在索引0中,我有,在索引1中,我有,我想给用户一个选项,让他自己设置什么是本地(Localy)url的意思。例如,如果现在mainUrl是,并且用户设置为关键字,例如:hello。那么列表外部包含hello的每个url都称为local(localy)它属于/与mainUrl相关。我的程序操作系统正在爬行。如果我为它设置mainUrl,我将挖掘它的级别。因此,我的程序这一部分的目标是设置本地的含义。如果用户设置了一个名为google.co.il的关键字,那么现在它应该搜索、查找并删除url中不包含google.co.il的所有网站。因此,最终外部将有只有包含google.co.il的url。如果用户将的关键字输入/更改为Daniel,那么现在external应该只包含包含Daniel一词的url。我们的想法是过滤,这样只有包含关键字的url才会保留在external中。也许我以前犯了一个错误。我想在externals中只保留url的内容tain in the keyword in.不要从外部删除所有包含该关键字的网站!我犯了一个错误。我想删除所有不包含该关键字的网站,并在外部只保留包含该关键字的网站。因此,如果mainUrl是,并且该mainUrl的关键字现在是google。那么外部最终应该是什么比如:index 0 index 1 index 2 google.google index 3 hi我的名字是google….等等。我编辑了k
变量,使其具有应有的含义。在最后一行代码中,我正在检查!index.Contains(I)
。如果你想过滤掉那些不包含关键字的,只需转到index.Contains(I)
相反。这能解决问题吗?