如何将1-20区间随机数按数值大小映射为1到10的对应整数
1-20区间整数映射到1-10区间实现方案
需求说明
将一组取值在1到20之间的整数,按数值大小线性映射到1-10的整数区间,要求原集合的最小值映射为1,最大值映射为10。
示例原数据:{3,7,14,8,17,6,12}
实现逻辑
核心采用线性归一化算法适配整数场景,步骤如下:
- 计算原集合的极值:最大值
valueMax、最小值valueMin,得到原区间跨度valueRange = valueMax - valueMin - 确定目标区间参数:目标最小值
scaleMin=1、目标最大值scaleMax=10,得到目标区间跨度scaleRange = scaleMax - scaleMin - 单值映射公式:
目标值 = ((i - valueMin) * scaleRange) / valueRange + scaleMin,整数除法特性可直接满足取整需求,无需额外处理
可直接运行的C#代码
注意:你找到的初始代码存在
scaleMin和scaleMax参数写反的问题,会导致映射结果倒置,以下为修正后版本
List<int> list = new List<int> { 3, 7, 14, 8, 17, 6, 12 }; // 目标区间配置 int scaleMin = 1; int scaleMax = 10; // 计算原集合区间参数 int valueMax = list.Max(); int valueMin = list.Min(); int valueRange = valueMax - valueMin; int scaleRange = scaleMax - scaleMin; // 批量映射 IEnumerable<int> normalized = list.Select(i => ((scaleRange * (i - valueMin)) / valueRange) + scaleMin ); // 输出结果 foreach (var num in normalized) { Console.WriteLine(num); }
示例结果验证
以示例原数据计算:
- 原集合最小值为3,映射结果为1,符合要求
- 原集合最大值为17,映射结果为10,符合要求
- 其余数值按比例均匀分布在1-10区间内
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

