Комбинация списка <Список <int>>

Если количество измерений language-integrated-query фиксировано, это просто SelectMany:

var qry = from a in A
          from b in B
          from c in C
          select new {A=a,B=b,C=c};

Однако, если list количество измерений контролируется csharp данными, вам необходимо использовать generic рекурсию:

static void Main() {
    List> outerList = new List>
    {   new List(){1, 2, 3, 4, 5},
        new List(){0, 1},
        new List(){6,3},
        new List(){1,3,5}
    };
    int[] result = new int[outerList.Count];
    Recurse(result, 0, outerList);
}
static void Recurse(int[] selected, int index,
    IEnumerable remaining) where TList : IEnumerable {
    IEnumerable nextList = remaining.FirstOrDefault();
    if (nextList == null) {
        StringBuilder sb = new StringBuilder();
        foreach (int i in selected) {
            sb.Append(i).Append(',');
        }
        if (sb.Length > 0) sb.Length--;
        Console.WriteLine(sb);
    } else {
        foreach (int i in nextList) {
            selected[index] = i;
            Recurse(selected, index + 1, remaining.Skip(1));
        }
    }
}

c#

linq

generics

list

combinations

2022-10-13T23:40:00+00:00