hej zastanawiałem się nad kombinacjami aż wpadłem na ten skrypt:
public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
return k == 0 ? new[] { new T[0] } :
elements.SelectMany((e, i) =>
elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] {e}).Concat(c)));
}
i dostałem małego zawrotu głowy mógłby ktoś wytłumaczyć mi jak działa. Szczególnie intryguje mnie ten fragment IEnumerable<IEnumerable<T>> po co w typie IEnumerable kolejny taki typ (ogólnie chyba jeszcze genericsów jeszcze nie zbyt łapie)? Będę wdzięczny za odpowiedź :D