public Probability GetProbability(MonthDay infoStart, MonthDay infoFinish, IEnumerable <int> years, int key, CountIdentity identity) { var intervals = GetIntarvalsFor(infoStart, infoFinish, years).OrderBy(x => x.DateStart); var probabilities = new List <ProbabilityItem>(); foreach (var year in years) { var yearData = GetYearData(intervals, infoStart, infoFinish, year); double top = 0; double down = 0; double max = -10 ^ 6; double min = 10 ^ 6; double sum = 0; double periodResult = 0; foreach (var yearItem in yearData) { var days = (yearItem.DateFinish.Day - yearItem.DateStart.Day) + 1; top += (days * yearItem.IntervalValue[key]); down += days; if (yearItem.IntervalValue[key] > max) { max = yearItem.IntervalValue[key]; } if (yearItem.IntervalValue[key] < min) { min = yearItem.IntervalValue[key]; } sum += yearItem.IntervalValue[key]; } if (yearData.Any()) { if (identity == CountIdentity.Av) { periodResult = top / down; } else if (identity == CountIdentity.Sum) { periodResult = sum; } else if (identity == CountIdentity.Max) { periodResult = max; } else if (identity == CountIdentity.Min) { periodResult = min; } probabilities.Add(new ProbabilityItem(year, periodResult)); } } var result = new Probability(infoStart, infoFinish, key); result.Probabilities = CountProbobilityValueInList(probabilities).ToList(); return(result); }
public List <Probability> GetProbabilities(string riverName, MonthDay infoStart, MonthDay infoFinish, int key, CountIdentity identity) { List <Probability> result; var river = rivers.FirstOrDefault(x => x.Name == riverName); if (river == null) { return(null); } result = new List <Probability>(); result.Add(river.GetProbability(infoStart, infoFinish, years, key, identity)); return(result); }