C#如何从变量中获取最大和最小数值(两者)

Posted

技术标签:

【中文标题】C#如何从变量中获取最大和最小数值(两者)【英文标题】:C# How to get the Max and Min numerical values (both) from a variable 【发布时间】:2021-05-20 11:08:40 【问题描述】:

我有一个C#代码与下一种情况

2 个变量:double qty1double qty2,它们经常接收 2 个不同的正数/负数。

然后有一个变量double currentResult接收 qty1 和 qty2 的总和(正/负数),并且 currentResult 每次 qty1 或 qty2 收到新数量时都会更改其值。 currentResult 的值没有存储在任何地方,不需要它,因为 currentResult 仅用于显示目的,所以它只是显示在屏幕上,作为实际信息显示并完成。直到现在我们都在讨论显示一个简单的求和结果,所以请不要把你的答案集中在这部分,因为这不是重要的部分。

好的,我需要的是从 currentResult 中获取 2 个值,这些值会随着新数据来自 qty1 和/或 qty2 而频繁更改:

currentResult 曾经拥有的所有数字中最大的正数 (double maxResult),目前是最新的。 currentResult 曾经拥有的所有数字中最小的负数 (double minResult),目前是最新的。

让我们给出一个随机的快速示例:当程序启动时,假设 currentResult 显示的第一个结果是 7,然后是 -1,然后是 3,然后是 -8,然后是 10,然后是 -4, -11, 15... 并在收到新数据时不断更新当前值,则:

- I need **maxResult** first displays as its value the number 7, then the number 10 as new max number among all currentResult has had until now, then 15, and so on.

- I need **minResult** first displays as its value the number -1, then the number -8 as new min number among all currentResult has had until now, then -11 and so on.

稍后,也许我可能需要存储 maxResult/minResult 的 5 或 n 个最后值之类的东西,但现在,我需要的主要是它们当前(最后一个)Max/Min 值在屏幕上保持可见,直到到达任何新的最大/最小数。

这里我使用“显示”这个词来直观地理解我需要什么作为最终结果,但我需要的主要是获取 maxResult 和 minResult 的必要代码,因为我还没有找到方法从这里描述的变量中获取这 2 个值。

请注意这里我们不是在谈论一个预定义的数字列表,我们需要在其中找到最大和最小数字,不,这里我们需要根据单个变量 (currentResult) 的值得出结果,随着时间的推移使用它的数值。

【问题讨论】:

每当currentResult 发生变化时,您应该将其值与maxResult 进行比较,如果currentResult > maxResult 则执行maxResult = currentResult。并将 currentResult 与 minResult 进行比较,如果 currentResult < minResult 然后 minResult = currentResult 感谢@ChetanRanpariya 的超快回复。我有一个非常非常短的编程背景。您能否编写代码部分来执行此操作?我不知道如何在代码中指定如何使用第一个 maxResult 和第一个 minResult 进行初始化,因为它们都开始“空”,然后继续与下一个 currentResultvalues 进行比较...我有关于它需要如何工作的基本逻辑,但我找不到将其转换为代码的方法。 dotnetfiddle.net/5p9Fe1 【参考方案1】:

您可以使用 Math.Max(double) 和 Math.Min(double) 函数来计算值。

例如:

using System;

namespace YourApp

    class MaxMin
    
        public double maxResult = Double.MinValue;
        public double minResult = Double.MaxValue;

        public void update(double currentResult)
        
            maxResult = Math.Max(maxResult, currentResult);
            minResult = Math.Min(minResult, currentResult);
        
    

您可以创建一个 MaxMin 对象并在对 currentResult 进行新分配时调用其 update() 方法,并从 maxResult 和 minResult 成员中获取值。

如果您不想要对象的开销,或者没有方便的地方可以访问它来更新 currentResult,则将变量和方法设为静态。

【讨论】:

谢谢@cph,对我对我的评论缺乏了解感到抱歉。在您在这里编写的这部分代码之后需要一种 whilefor 循环来执行您提到的更新?关于public double maxResult = Double.MinValue; 不应该是public double maxResult = Double.MaxValue;,最后是Double.MaxValue,而不是Double.MinValue @adiario 如果 maxResult 被初始化为 double.MaxValue 它永远不会改变。将其初始化为double.MinValue 保证它将在第一次更新时更新。该示例可能需要一些额外的逻辑来隐藏 maxValue 如果它应该只显示正值,则它是负数。 您可以将它们都初始化为 0.0 以避免显示最大值为负数和最小值为正数。 要使用它,您首先需要创建一个实例,例如 maxMin = new (MaxMin);然后无论 currentResult 被分配了它的值,调用 maxMin.update(currentValue)。获取显示值,访问 maxMin.maxResult 和 maxMin.minResult; @JonasH 噢噢噢!好的,现在我更好地理解了逻辑。我有很多要学习和改进的地方,谢谢你的澄清。我是新来的,我从未从未见过响应如此迅速的在线社区,只需看看 CPH 和 Chetan-Ranpariya 如何在几分钟内编写这部分代码。对我来说,看到这样的事情,我感到惊奇【参考方案2】:
using System;
public class Program
     
    static Random random = new Random();
    public static void Main()
           
        double maxResult = 0;
        double minResult = 0;
    
        for( var i = 0;i<5;i++)
        
            double currentResult = GetCurrentResult();
    
            maxResult = Math.Max(maxResult, currentResult);
            minResult = Math.Min(minResult, currentResult);
            Console.WriteLine("Curent Result " + currentResult);
            Console.WriteLine("Max Result " + maxResult);
            Console.WriteLine("Min Result " + minResult);
        
    

    private static double GetCurrentResult()
    
        double maxValue = 100d;
        double minValue = -100d;
        double sample = random.NextDouble();
        return (maxValue * sample) + (minValue * (1d - sample));
       

【讨论】:

你无法想象我非常感谢你花时间编写答案的代码部分@ChetanRanpariya :)我会补充将其放入其余代码中,立即进行一些测试! 非常感谢您花时间写一个打印过程的例子。通过该示例,我可以看到并更好地理解 Math.MaxMath.Min 的工作原理。祝你有美好的一天。

以上是关于C#如何从变量中获取最大和最小数值(两者)的主要内容,如果未能解决你的问题,请参考以下文章

从变量中获取最小值和最大值的正确方法

c# 如何获取列表中某个属性最大或最小的元素?

获取包含 X 位数的最小和最大整数值

如何在 C# 中的键和值列表上使用 Lambda 函数获取最大值和最小值?

c# int型最大值

如何在 1 个查询中从 Mongo DB 获取最小值和最大值? C#