Правильный код для хранения предыдущих значений (и их обновления)
Итак, вот пример того, как кто-то (я) пишет очень плохой код на 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, тогда ваше решение с массивом так же хорошо, как и любая другая реализация