开发者

.net(C#) Comparing two list of strings and removing non matching elements

Is there any way to compare two list of strings(regard开发者_StackOverflow中文版less of case sensitivity) or do I need to write custom code for such comparison? I also want to remove non-matching items from my dictionary.

e.g

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");

Now after comparison I want to have only "value1" and "value2" in lst2.

Regards, JS


You can use LINQ Intersect method.

var result = lst1.Intersect(lst2, StringComparer.InvariantCultureIgnoreCase);

You can avoid creating your own implementation of IEqualityComparer<string> by using StringComparer

If you want the result to be in the lst2, then do it like that:

lst2 = lst1.Intersect(lst2, StringComparer.InvariantCultureIgnoreCase).ToList();


You can use the Enumerable.Intersect method

Refer to the MSDN documentation for examples: http://msdn.microsoft.com/en-us/library/bb460136.aspx

Refer to Dyppl's answer for implementing the Case insensitive comparison.


You can use the Intersect extension method. To do it case insenstive you can use an equaty comparer:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜