public static Dictionary <int, Int32Range> GetRanges(int numShards) { if (numShards < 1) { throw new ArgumentOutOfRangeException(nameof(numShards), numShards, "numShards cannot be less than 1."); } var ranges = new Dictionary <int, Int32Range>(numShards); const uint totalNumbersInRangeType = uint.MaxValue; var rangeSize = (uint)Math.Ceiling(totalNumbersInRangeType / (decimal)numShards); int shardNumber = 1; int lowValue = int.MinValue; while (shardNumber < numShards) { var highValue = (int)(lowValue + rangeSize); var shardRange = new Int32Range(lowValue, highValue); ranges.Add(shardNumber, shardRange); shardNumber++; lowValue = highValue; } // last range if (lowValue < int.MaxValue) { var highValue = (lowValue + rangeSize); if (highValue > int.MaxValue) { highValue = int.MaxValue; } var lastShardRange = new Int32Range(lowValue, (int)highValue); ranges.Add(numShards, lastShardRange); } return(ranges); }
public static Dictionary<int, Int32Range> GetRanges(int numShards) { if (numShards < 1) { throw new ArgumentOutOfRangeException(nameof(numShards), numShards, "numShards cannot be less than 1."); } var ranges = new Dictionary<int, Int32Range>(numShards); const uint totalNumbersInRangeType = uint.MaxValue; var rangeSize = (uint)Math.Ceiling(totalNumbersInRangeType / (decimal)numShards); int shardNumber = 1; int lowValue = int.MinValue; while (shardNumber < numShards) { var highValue = (int)(lowValue + rangeSize); var shardRange = new Int32Range(lowValue, highValue); ranges.Add(shardNumber, shardRange); shardNumber++; lowValue = highValue; } // last range if (lowValue < int.MaxValue) { var highValue = (lowValue + rangeSize); if (highValue > int.MaxValue) { highValue = int.MaxValue; } var lastShardRange = new Int32Range(lowValue, (int)highValue); ranges.Add(numShards, lastShardRange); } return ranges; }