我有这段代码:
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();
}
}
当用户点击button6时,它会打开一个带有textBox的新表单,用户可以在关键字中键入,该关键字可以是一个url,也可以只是一个单词。 当用户单击“确定”时,它正在执行以下行:
LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);
LocalyKeyword是一个List,crawlLocaly1是一个新的Form,我在其中获取用户在textBox中输入的文本。
mainUrl是当前网址。
因此,如果mainUrl是例如http://www.google.com
用户输入:Daniel
因此,在索引0的LocalyKeyWords列表中,我将看到:Daniel,http://www.google.com 所以我知道关键字Daniel属于http://www.google.com
现在我有了这段代码:
private void removeExternals(List<string> externals)
{
}
现在用户可以随时更改和设置mainUrl。 我需要在函数removeExternals中检查mainUrl现在是什么,然后在List LocalyKeyWords中找到url,然后从List externals中删除属于LocalyKeyWords中url的关键字的所有位置。
例如,mainUrl现在是http://www.google.com 所以我需要找到属于http://www.google.com的关键字 例如,关键字是Daniel:Daniel,http://www.google.com
现在删除List外部包含关键字Daniel
的所有位置答案 0 :(得分:1)
正如其他人所说,LookUp或Dictionary可能在这里最好。如果您使用词典滚动:
//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();
}
这应该可以解决问题,但我并不是100%肯定你的目标。