0

私はこのコードを持っています:

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();
    }
}

ユーザーがボタン6をクリックすると、テキストボックスを含む新しいフォームが開きます。ユーザーは、URLまたは単なる単語のキーワードを入力します。ユーザーが[OK]をクリックすると、次の行が実行されます。

LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);

LocalyKeywordはリストであり、crawlLocaly1は、ユーザーがtextBoxに入力したテキストを取得する新しいフォームです。

mainUrlは現在のURLです。

したがって、mainUrlがたとえばhttp://www.google.comの場合

そして、ユーザーは次のように入力しました:ダニエル

したがって、インデックス0のLocalyKeyWordsリストに次のように表示されます。Daniel、http://www.google.comしたがって、キーワードDanielがhttp://www.google.comに属していることがわかります。

今私はこのコードを持っています:

private void removeExternals(List<string> externals)
{

}

これで、ユーザーはいつでもmainUrlを変更および設定できます。関数removeExternalsで、mainUrlが現在何であるかを確認し、リストLocalyKeyWordsでURLを検索し、LocalyKeyWordsのURLに属するキーワードのすべての場所をリスト外部から削除する必要があります。

たとえば、mainUrlはhttp://www.google.comになっているので、 http ://www.google.com に属するキーワードを見つける必要があります。 たとえば、キーワードはDaniel:Daniel、http://www.googleです。 com

だから今、キーワードダニエルを含むリスト外部のすべての場所を削除します

4

1 に答える 1

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% 確信が持てませんでした。

于 2012-10-09T00:10:43.773 に答える