如何从列表中删除字符串对象

本文关键字:删除 字符串 对象 列表 | 更新日期: 2023-09-27 18:22:15

我有两个字符串Header1Header2 列表

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");

我想忽略区分大小写,从Header1中删除Header2中的这些条目"String1"answers"String2"。

任何关于如何使用LINQ或字符串操作的想法。

感谢

如何从列表中删除字符串对象

Header1.RemoveAll(x => 
            Header2.Contains(x, StringComparer.CurrentCultureIgnoreCase));

不需要Linq。List类有一个可以使用的方便的RemoveAll方法:

var stringsToRemove = new[] { "string1", "string2" };
var comp = StringComparison.InvariantCultureIgnoreCase;
Header1.RemoveAll(s => Header2.Any(t => s.Equals(t, comp)));

你可以做:

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

EqualityComparer允许您指定一个自定义比较器,以便它只在string相等时返回true,而不考虑大小写。

MSDN文档

我认为LINQ不允许您修改集合。然而,如果你很乐意在没有Header2项目的情况下创建一个新的集合,可以尝试这样的方法:

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

如果你确实想修改原始列表,可以试试这样的方法:

Header1.RemoveAll(item => Header2.Contains(item, StringComparer.OrdinalIgnoreCase));