Я сделал цикл, который в течение каждого месяца с текущего возраста через год х, скажем 80.Изменение размера массива потерять пустые значения
У меня есть массив yearCalculation лет и каждый yearCalculation содержит среди прочего массив monthCalculation. (Только в случае, если кто-то хочет, чтобы бросить комментарий о списках, я в настоящее время с помощью массивов и хочу увидеть, если есть простое решение.)
Это выглядит следующим образом:
yearCalculations[] years = years.InstantiateArray(//Number of years, [80 minus age]//);
monthCalculations[] months = months.InstantiateArray(//Number of months in a year, [this should be 12]//);
После того, как Я повторяю все периоды и заполняю их различными вычислениями. (Однако, после того, как возраст х было достигнуто, все расчеты приведут к нулевому):
for (int i = 0; i < yearCalculations.Length; i++) {
for (int j = 0; j < yearCalculations[i].monthCalculations.Length; j++) {
Double age = calculateAge(birthDate, dateAtTimeX);
if(age < ageX){
//Do all sorts of calculations.
}else{
//Break out of the loops
}
}
}
Как вы можете понять, в возрасте X (80), расчеты будет полным, но последний yearcalculation будет содержать некоторые результаты, без расчетов. Допустим, это с 7-го месяца. Самый простой способ изменить размер этого массива, удалив все месяцы без вычислений (например, индекс 6 и дальше)?
Только для полноты, вот функция instantiateArray;
public static T[] InstantiateArray<T>(this T[] t, Int64 periods) where T : new()
{
t = new T[periods];
for (int i = 0; i < t.Length; i++){
t[i] = new T();
}
return t;
}
Серьезно, почему бы вам не использовать 'List' для этого? Существует не так много причин использовать массивы, особенно когда вам нужно изменить их размер. –
xxbbcc
@JonSkeet Что так ужасно относительно метода расширения? Он работает для этой цели. – Sliver2009
@ Sliver2009: он не использует существующее значение вообще - вы предположительно используете его только для ввода типа ... Я не рассматриваю это как хорошее использование для метода расширения лично. (Я удивлен, что он даже работает в коде, с которым вы его используете, - вы объявляете переменную и используете ее в своем собственном инициализаторе, который не должен компилироваться.) –