2

textBoxからリストを取得し、別のリストを使用してそれをスクラブするルーチンを作成しようとしています。一致するテキストを持つ文字列のみが残ります。スクラブリストが何で構成されるかわからないため、RegExを使用できないと思います。一致は絶対的である必要はありません。例えば:

'ant' from my scrub list would match 'antiques', 'manta', 'ants', etc.

次のコードで正しい方向に進んでいると思いましたが、コードの最後の2行の両方で赤い波線が表示されています。任意の助けをいただければ幸いです:

List<string> masterList = new List<string>(textBox_masterList.Text.Split(','));    
List<string> scrubList = new List<string>(textBox_scrubList.Text.Split(','));
for (int i = 0; i < masterList.Count; i++)
    masterList = masterList.Where(x => x.Contains(scrubList));

また

    masterList = masterList.RemoveAll(x => x.!Contains(scrubList));

私はここで何が間違っているのですか?

4

4 に答える 4

3
List<string> masterList = new List<string>(textBox_masterList.Text.Split(','));
List<string> scrubList = new List<string>(textBox_scrubList.Text.Split(','));
masterList = masterList.Where(x => scrubList.Any(s => x.Contains(s)))
                       .ToList();

検索で大文字と小文字を区別しないようにするには:

masterList = masterList.Where(x => scrubList.Any(s => 
                          Regex.IsMatch(x, s, RegexOptions.IgnoreCase)))
                       .ToList();
于 2012-12-18T10:21:08.417 に答える
3

効率的で短いアプローチは以下を使用していEnumerable.Exceptます:

masterList = masterList.Except(scrubList).ToList();

RemoveAll一時リストを作成する必要のないものを使用する場合:

masterList.RemoveAll(str => scrubList.Contains(str));

にあるすべての文字列を削除したいのでscrubList

編集:大文字と小文字を区別しないようにする:

masterList.RemoveAll(str => scrubList.Any(s => s.Equals(str, StringComparison.OrdinalIgnoreCase)));
于 2012-12-18T10:19:30.530 に答える
2

forステートメントは役に立たないので、変数iは使用しません。

于 2012-12-18T10:22:11.303 に答える
0

私は手元にコードを持っていませんが、それぞれlistをに変換してからdatatable結合を使用することができます。これは、最初のリストが削除された結果になるはずです。

于 2012-12-18T10:18:08.627 に答える