如何从包含URL的URL <string>中删除url?</string>中的特定字符串

时间:2012-10-08 23:01:25

标签: c#

我有这段代码:

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

的所有位置

1 个答案:

答案 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%肯定你的目标。