有没有办法比较两个字符串列表(无论区分大小写)或者我是否需要编写自定义代码进行此类比较?我还想从我的字典中删除不匹配的项目。
例如
List<string> lst1 = new List<string>();
lst1.Add("value1");
lst1.Add("VALUE2");
List<string> lst2 = new List<string>();
lst2.Add("value1");
lst2.Add("value2");
lst2.Add("value3");
现在比较后我想在lst2
中只有“value1”和“value2”。
此致 JS
答案 0 :(得分:23)
您可以使用LINQ Intersect方法。
var result = lst1.Intersect(lst2, StringComparer.InvariantCultureIgnoreCase);
您可以使用StringComparer
避免创建自己的IEqualityComparer<string>
实施
如果您希望结果位于lst2
,请按以下方式执行:
lst2 = lst1.Intersect(lst2, StringComparer.InvariantCultureIgnoreCase).ToList();
答案 1 :(得分:2)
您可以使用Enumerable.Intersect
方法
有关示例,请参阅MSDN文档:http://msdn.microsoft.com/en-us/library/bb460136.aspx
请参阅Dyppl的答案,以实现不区分大小写的比较。
答案 2 :(得分:1)
您可以使用Intersect
扩展名方法。为了做到不区分大小写,您可以使用相等比较器:
class Program
{
static void Main(string[] args)
{
List<string> lst1 = new List<string>();
List<string> lst2 = new List<string>();
CaseInsensitiveEquityComparer comparer = new CaseInsensitiveEquityComparer();
var result = lst1.Intersect(lst2, comparer);
}
}
class CaseInsensitiveEquityComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return String.Compare(x,y,true,CultureInfo.CurrentCulture) == 0;
}
public int GetHashCode(string obj)
{
return obj.GetHashCode();
}
}