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