У меня есть коллекция, которая представляет население (M, F) для каждого возраста.
Чтобы прогнозировать численность населения во времени, я должен сначала сделать расчеты с женщинами, чтобы я мог рассчитать процент новорожденных мужчин и женщин на основе статистической константы мужского родов.
Тем не менее, у меня есть первая матрица, которая включает в себя как мужчин, так и женщин по годам.
// Where 1 is the evaluation Id and 2009 the year I want the
// initial population information for.
IList<AnnualPopulation> initialPopulation =
LoadMatrix<AnnualPopulation>(1, 2009);
Теперь, чтобы сначала спроецировать женское население, я использую следующее:
IList<AnnualPopulation> initialWomenPopulation = (
from w in initialPopulation
where String.Equals("F", w.Gender)
select w
).FirstOrDefault();
И я должен учитывать коэффициенты смертности как для текущего (начальный год (2009)), так и для года, на который я хочу прогнозировать, исходя из которого у меня уже есть коэффициенты смертности на каждый год.
IList<AnnualDeathRate> deathRates = LoadMatrix<AnnualDeathRate>(1, 2009)
Это загружает ставки deather с 2009 и позже для каждого года возраста. Следовательно, чтобы рассмотреть только 2009 и 2010, скажем, я использовал следующий код Linq.
AnnualDeathRate[] femaleDeathRates = (
from fdr in deathRates
where (string.Equals("F", fdr.Gender))
select fdr
).TakeWhile(dr =>
initialWomenPopulation.Year == dr.Year ||
dr.Year == initialWomenPopulation.Year + 1
).ToArray()
Вопросы
- Было бы лучше, если бы я использовал
.Take(2)
вместе с дополнительным условием where
для dr.Year
?
- Есть ли лучшие альтернативы?
- Стоит ли учитывать мой подход?