2013-07-15 55 views
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的” 在Header2Header1

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

谢谢

+0

你想从Header1中删除出现在Header2中的字符串? – Usman

+0

@Usman,没错。 – Kiran

回答

6

有没有需要Linq。该List类有一个方便RemoveAll方法,你可以使用:

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

谢谢,但我想使用列表'Header2'。我不知道Header2 – Kiran

+0

@ www.sapnaedu.in中的列表数。对不起,我首先想念这个问题。查看我的更新回答 –

+0

非常感谢您的快速回答:) – Kiran

3

你可以这样做:

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

EqualityComparer允许您指定自定义比较,以便当string s为它只会返回true平等而不考虑案件。

MSDN documentation

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

我不认为LINQ允许你修改集合。但是,如果你快乐,从而产出未经头2项新的集合,尝试这样的事情:

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

如果你想修改原来的列表中,尝试这样的事情:

Header1.RemoveAll(item => Header2.Contains(item, StringComparer.OrdinalIgnoreCase)); 
相关问题