Правильный код для хранения предыдущих значений (и их обновления)

Итак, вот пример того, как кто-то (я) пишет очень плохой код на 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]; }   

Для более продвинутого и опытного (и более умного) программиста, чем я, что я должен делать вместо этого, который либо более эффективен / элегантен / дружественен к процессу?

Заранее спасибо за любое время или внимание, которое вы уделяете этому вопросу.:)

1 ответ

Если причина, по которой вы делаете это таким образом, заключается в том, что вы хотите получить предыдущие значения в некоторых случаях. Вы можете подумать об использовании чего-то вроде стека. .NET имеет встроенный стек

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

Каждый раз, когда вы получаете новое значение, вы вызываете stack.push (newValue). Если вы хотите, чтобы предыдущее значение (действующее так же, как кнопка "Назад" в браузере), вы используете pop.

Если вы используете последние N значений для чего-то вроде ODE-решателя runge-kutta, тогда ваше решение с массивом так же хорошо, как и любая другая реализация

Другие вопросы по тегам