如何从列表中删除字符串对象
本文关键字:删除 字符串 对象 列表 | 更新日期: 2023-09-27 18:22:15
我有两个字符串Header1
和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");
我想忽略区分大小写,从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));