我有2个字符串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");
我想忽略区分大小写,从Header2
中删除Header1
中的这些条目“String1”和“String2”。
任何想法如何使用LINQ
或字符串操作。
由于
答案 0 :(得分:7)
Header1.RemoveAll(x =>
Header2.Contains(x, StringComparer.CurrentCultureIgnoreCase));
答案 1 :(得分:6)
Linq没有必要。 List
类有一个方便的RemoveAll
方法可供您使用:
var stringsToRemove = new[] { "string1", "string2" };
var comp = StringComparison.InvariantCultureIgnoreCase;
Header1.RemoveAll(s => Header2.Any(t => s.Equals(t, comp)));
答案 2 :(得分:3)
你可以这样做:
Header1.Except(Header2, new EqualityComparer<string>((a, b) => a.Equals(b, StringComparison,OrdinalIgnoreCase)));
EqualityComparer
允许您指定一个自定义比较器,这样只有在string
s相等而不考虑大小写时它才会返回true。
答案 3 :(得分:3)
我不认为LINQ允许您修改集合。但是,如果您很乐意在没有Header2项目的情况下制作新的集合,请尝试以下方法:
var result = Header1.Except(Header2, StringComparer.OrdinalIgnoreCase);
如果您确实想修改原始列表,请尝试以下操作:
Header1.RemoveAll(item => Header2.Contains(item, StringComparer.OrdinalIgnoreCase));