Divide an integer into groups with C#
November 3, 2015 2 Comments
Say you’d like to divide an integer, e.g. 20, into equal parts of 3 and distribute any remainder equally across the groups. The result of such an operation would be the following 3 integers:
7,7,6
20 can be divided into 3 equal parts of 6 and we have a remainder of 20 – 6 * 3 = 2. 2 is then added as 1 and 1 to the first two groups of 6. The result is a more or less equal distribution of the start integer.
The following function will perform just that:
public static IEnumerable<int> DistributeInteger(int total, int divider) { if (divider == 0) { yield return 0; } else { int rest = total % divider; double result = total / (double)divider; for (int i = 0; i < divider; i++) { if (rest-- > 0) yield return (int)Math.Ceiling(result); else yield return (int)Math.Floor(result); } } }
Call it as follows:
List<int> test = DistributeInteger(20, 3).ToList();
“test” will include 7,7,6 as expected.
View all various C# language feature related posts here.
Pingback: Divide an integer into groups with C# | .NET developpement
please give code in VB.NET for distributing the integer in equal parts