.net(C#)比较两个字符串列表并删除不匹配的元素

时间:2011-03-17 05:49:01

标签: c#

有没有办法比较两个字符串列表(无论区分大小写)或者我是否需要编写自定义代码进行此类比较?我还想从我的字典中删除不匹配的项目。

例如

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

3 个答案:

答案 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();
    }
}