Search code examples
linqcartesian

N-Ary/Multiple-List Cartesian Product


in Product SKUs, we can get Cartesian Product in the way of LINQ:

string[] arr1 = new[] {"red", "blue", "orange"};
string[] arr2 = new[] {"5 inche", "8 inch"};
var result = from a in arr1
             from b in arr2
             select a + " " + b;
foreach (var item in result){
    Console.WriteLine(item);
}

We know the exact number of arrays.

My question is: If the number of arrays is dynamic, how do we get Cartesian Product?

Thanks.


Solution

  • I'd put them in a list of string arrays. Then I'd use ForEach:

    IEnumerable<string> result = list.First();
    
    list.RemoveAt(0);
    
    list.ForEach(delegate(IEnumerable<string> value)
    {
         result = (from r in result
                   from v in value
                   select r + " " + v).ToList();
    
    });
    

    You can also see this link : Cartesian Product for Group members