You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:42:00