views:

40

answers:

2

I have like 4 columns in a file, each column contains a number of values, more or less. I need to get all possible combinations, while order of columns and number of sections in resulting strings should remain the same.

E.g. first column contains numbers ranging 1-100, second: letters a-z, and the third one is also numeric, I would get something like

1-A-1, 2-A-1, 3-A-1; 1-B-1, 1-B-2, 1-B-3 and so on.

+3  A: 

There are various general-purpose approaches to this, but the simplest for a case where you know exactly how many columns you've got is just to use nested loops:

foreach (var a in firstColumn)
{
    foreach (var b in secondColumn)
    {
        foreach (var c in thirdColumn)
        {
           foreach (var d in fourthColumn)
           {
               // Do something with a, b, c, d
           }
        }
    }
}

Alternative using LINQ:

var query = from a in firstColumn
            from b in secondColumn
            from c in thirdColumn
            from d in fourthColumn
            select new { a, b, c, d };
foreach (var tuple in query)
{
    // Do something with tuple.a, tuple.b etc
}
Jon Skeet
A: 

Assuming you have parsed the file into a list of Foo objects where each property contains the value of a column:

class Foo
{
    public string Column1 { get; set; }
    public string Column2 { get; set; }
    public string Column3 { get; set; }
    public string Column4 { get; set; }
}

List<Foo> list = ParseFile();


var query = from f1 in list
            from f2 in list
            from f3 in list
            from f4 in list
            select new Foo
            {
                Column1 = f1.Column1,
                Column2 = f2.Column2,
                Column3 = f3.Column3,
                Column4 = f4.Column4,
            };

Foo[] combinations = query.ToArray();
Thomas Levesque