2

Header1私は文字列の2つのリストを持っています Header2

List<String> Header1 = new List<String>();
Header1.add("String1");
Header1.add("String2");
Header1.add("String3");
Header1.add("String4");

    List<String> Header2 = new List<String>();
    Header2.add("STRING1");
    Header2.add("STRING2");

大文字と小文字の区別を無視して、これらのエントリ "String1" と "String2" をHeader2から削除したいと思います。Header1

LINQまたは文字列操作を使用してそれを行う方法についても考えてください。

ありがとう

4

4 に答える 4

7
Header1.RemoveAll(x => 
            Header2.Contains(x, StringComparer.CurrentCultureIgnoreCase));
于 2013-07-15T04:36:32.863 に答える
6

Linq は必要ありません。Listクラスには、使用できる便利なRemoveAllメソッドがあります。

var stringsToRemove = new[] { "string1", "string2" };
var comp = StringComparison.InvariantCultureIgnoreCase;
Header1.RemoveAll(s => Header2.Any(t => s.Equals(t, comp)));
于 2013-07-15T04:33:11.720 に答える
3

LINQ ではコレクションを変更できないと思います。ただし、Header2 のアイテムを使用せずに新しいコレクションを作成してもよければ、次のようにしてみてください。

var result = Header1.Except(Header2, StringComparer.OrdinalIgnoreCase);

元のリストを変更したい場合は、次のようにしてみてください。

Header1.RemoveAll(item => Header2.Contains(item, StringComparer.OrdinalIgnoreCase));
于 2013-07-15T04:42:07.240 に答える
3

できるよ:

Header1.Except(Header2, new EqualityComparer<string>((a, b) => a.Equals(b, StringComparison,OrdinalIgnoreCase)));

では、大文字と小文字を区別せずに s が等しいEqualityComparer場合にのみ true を返すように、カスタム比較子を指定できます。string

MSDN ドキュメント

于 2013-07-15T04:34:57.040 に答える