【问题标题】:Proper code for storing previous values (and refreshing them)用于存储先前值(并刷新它们)的正确代码
【发布时间】:2018-08-06 03:47:20
【问题描述】:

下面是某人(我)编写非常糟糕的 C# 代码的示例。

我正在尝试找出存储值并用已知值替换它们的最佳方法。

这是我之前的做法:

int
EMA_Value_Prev4,
EMA_Value_Prev3,
EMA_Value_Prev2,
EMA_Value_Prev,
EMA_Value;

EMA_Value_Prev4 = EMA_Value_Prev3;
EMA_Value_Prev3 = EMA_Value_Prev2;
EMA_Value_Prev2 = EMA_Value_Prev;
EMA_Value_Prev = EMA_Value;
EMA_Value = 0;

//  In the below space, some code figures out what EMA_Value is

/*  Some amazing code */

//  EMA_Value now equals 245 (hypothetically).

从那时起,我就使用数组来存储它和 for 循环,如下所示:

 int [] EMA_Value = new int [5];

 for (xCount=4; xCount>1; xCount--)
    {EMA_Value[xCount] = EMA_Value[xCount - 1]; }   

对于比我更先进、更有经验(和更聪明)的编码器,我应该做的事情是更高效/优雅/流程友好?

提前感谢您提供此问题的任何时间或关注。 :)

【问题讨论】:

    标签: arrays sorting for-loop historical-debugging


    【解决方案1】:

    如果您这样做的原因是因为您想在某些情况下获取以前的值。您可以考虑使用 Stack 之类的东西。 .NET 有一个内置堆栈

    Stack<int> stack = new Stack<int>();
    stack.push(10)
    int topValue = stack.pop()
    

    每次获得新值时,都会调用 stack.push(newValue)。如果您想要之前的值(与浏览器上的后退按钮的行为方式相同),则使用 pop。

    如果您将最后 N 个值用于类似 runge-kutta ODE 求解器,那么您的数组解决方案与任何其他实现一样好

    【讨论】:

    • 嗨,埃里克,非常感谢您!实施问题。假设我需要在堆栈深处获取两层的值。第三行会是“int 2ndValue = stack.pop(2); 吗?
    • Pop 将从堆栈中删除该值。因此,如果您想要返回第二个值,那么您将再次弹出。 Pop 不带参数。如果您希望随机访问这些值,而不仅仅是迭代地访问最后一个值,那么最好使用您之前发布的数组实现
    • 太好了,感谢 Eric 的回复。希望你的一周一切顺利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2013-04-25
    • 2012-07-06
    • 2014-01-14
    • 2021-12-25
    • 2013-02-14
    相关资源
    最近更新 更多