C# determine if list of strings have same value without regard to position

I have two list of strings I am getting from a function.  How can I tell if they are identical without respect to the order.

meaning

list1 = {"a", "b", "c"}
list2 = {"c", "b", "a"}
list3 = {"a")

list1 and list2 would be equal
list1 and list3 would not be equal
list2 and list3 would not be equal
jackjohnson44Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
ste5anConnect With a Mentor Senior DeveloperCommented:
E.g. using Linq:

namespace Samples
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    public class Sample
    {
        public static void Main()
        {
            List<string> list1 = new List<string>() { "a", "b", "c" };
            List<string> list2 = new List<string>() { "c", "b", "a" };
            List<string> list3 = new List<string>() { "a" };

            if (list1.Except(list2).Count() == 0)
                Console.WriteLine("list1=list2");

            if (list1.Except(list3).Count() == 0)
                Console.WriteLine("list1=list3");

            if (list2.Except(list3).Count() == 0)
                Console.WriteLine("list2=list3");

            Console.ReadLine();
        }
    }  
}

Open in new window

0
 
käµfm³d 👽Commented:
If you cannot use LINQ (for whatever reason), then the "old school" approach would be to sort the lists and then compare  each element:

bool areEqual = true;

list1.Sort();
list2.Sort();

if (list1.Length != list2.Length)
{
    areEqual = false;
}
else
{
    for (int i = 0; i < list1.Length; i++)
    {
        if (list1[i] != list2[i])
        {
            areEqual = false;
        }
    }
}

Open in new window

0
 
it_saigeDeveloperCommented:
Normally I would say that Enumerable.SequenceEqual would suffice, but in this case (since the items are out of order) it would not.  So you would sort the items before comparing:
Enumerable.SequenceEqual(list1.OrderBy(i => i), list2.OrderBy(i => i))

Open in new window


For custom types, you will have to implement a comparer if the standard comparer does not work.  In those cases, code would be changed to:
Enumerable.SequenceEqual(list1.OrderBy(i => i, myListComparer), list2.OrderBy(i => i, myListComparer))

Open in new window


More information on implementing a comparer:

http://msdn.microsoft.com/en-us/library/234b841s(v=vs.110).aspx

-saige-
0
All Courses

From novice to tech pro — start learning today.