Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从列表中删除<;字符串>;包含url';在url';s_C# - Fatal编程技术网

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)
相反。这能解决问题吗?