C#如何从动态更新的currentResult变量获取历史最大值与最小值
动态currentResult正负极值实时跟踪实现方案
核心思路
不需要存储任何历史取值,仅靠两个固定的极值变量,在每次currentResult更新的节点做即时比较即可,全程内存占用固定为几个double类型变量,哪怕qty1、qty2高频变动,性能开销也可以忽略。
具体实现步骤
- 极值变量初始化,避开默认0值的逻辑偏差:
maxResult(存储历史最大正值)初始赋值为double.NegativeInfinity,保证首次遇到正值时能正常完成比较更新minResult(存储历史最小负值)初始赋值为double.PositiveInfinity,保证首次遇到负值时能正常完成比较更新
- 统一拦截currentResult的更新节点:不管是qty1还是qty2接收到新值,都在重新计算得到最新
currentResult的同一流程内,紧接着完成极值判断更新,不需要额外的复杂监听逻辑- 对maxResult的判断:如果当前最新的
currentResult是正值,且数值大于当前已存储的maxResult,就把maxResult更新为这个最新值 - 对minResult的判断:如果当前最新的
currentResult是负值,且数值小于当前已存储的minResult,就把minResult更新为这个最新值
- 对maxResult的判断:如果当前最新的
参考实现代码
// 原有业务变量定义 double qty1, qty2; double currentResult; // 极值跟踪变量,按极值反向边界初始化 double maxResult = double.NegativeInfinity; double minResult = double.PositiveInfinity; // 统一封装更新逻辑,qty1/qty2任意值变动时都调用该方法 private void SyncCalculation(double? newQty1 = null, double? newQty2 = null) { // 接收传入的新qty值 if (newQty1.HasValue) qty1 = newQty1.Value; if (newQty2.HasValue) qty2 = newQty2.Value; // 原有求和计算逻辑 currentResult = qty1 + qty2; // 同步更新最大正值 if (currentResult > 0 && currentResult > maxResult) { maxResult = currentResult; } // 同步更新最小负值 if (currentResult < 0 && currentResult < minResult) { minResult = currentResult; } }
逻辑验证(匹配给定示例)
按照示例的currentResult取值序列:7、-1、3、-8、10、-4、-11、15,走完整逻辑后极值变化完全符合预期:
- 初始状态:maxResult=-∞,minResult=+∞
- currentResult=7(正):maxResult更新为7,minResult保持不变
- currentResult=-1(负):minResult更新为-1,maxResult保持不变
- currentResult=3(正):3小于当前maxResult=7,maxResult不变
- currentResult=-8(负):-8小于当前minResult=-1,minResult更新为-8
- currentResult=10(正):10大于当前maxResult=7,maxResult更新为10
- currentResult=-4(负):-4大于当前minResult=-8,minResult不变
- currentResult=-11(负):-11小于当前minResult=-8,minResult更新为-11
- currentResult=15(正):15大于当前maxResult=10,maxResult更新为15
边界情况说明
如果运行过程中从未出现过正值,maxResult会保持double.NegativeInfinity状态;如果从未出现过负值,minResult会保持double.PositiveInfinity状态。界面展示时可以基于这两个特殊值做判断,显示对应的空态提示即可,不会出现逻辑判断错误。
内容的提问来源于stack exchange,提问作者adiario
相关产品推荐
相关产品推荐

