Bigio.Common.Classes.Range.Divide C# (CSharp) Method

Divide() public method

Divide current range into almost equal inner ranges.
public Divide ( int partCount ) : IEnumerable
partCount int Count of parts to divide
return IEnumerable
        public IEnumerable<Range> Divide(int partCount)
        {
            if (partCount == 0)
                throw new ArgumentOutOfRangeException("partCount");

            if (partCount < Count)
                yield return this;

            int countOfOnePart = Count/partCount;

            for (int i = 0; i < partCount - 1; i++)
            {
                yield return new Range(Index + i * countOfOnePart, countOfOnePart);
            }

            //Last range can contains more elements than others, for example: Range(0, 10).Divide() = {Range(0, 3), Range(3,3), Range{6, 4)}.
            int processedElementsCount = countOfOnePart*(partCount - 1);
            yield return new Range(Index + processedElementsCount, Count - processedElementsCount);
        }