public SpanOfYears YearsIntervalForPeriod(MonthPeriod period) { SpanOfYears[] validSpan = Milestones.Where((x) => SeqOfYears.SelectForPeriod(x, period)).ToArray(); SpanOfYears firstSpan = validSpan.FirstOrDefault(); return(firstSpan == null?SpanOfYears.Empty() : firstSpan); }
private static SpanOfYears TransformYearsToSpans(UInt16 yearFrom, UInt16 yearUpto) { UInt16 tranUpto = SeqOfYears.TransformZeroToUpto(yearUpto); UInt16 spanUpto = (tranUpto == yearFrom ? tranUpto : (UInt16)(tranUpto - 1u)); return(new SpanOfYears(yearFrom, spanUpto)); }
public SeqOfYears(UInt16[] years) { UInt16[] sortedYears = years.OrderBy((x) => SeqOfYears.TransformZeroToUpto(x)).ToArray(); int beginsCount = sortedYears.Length - 1; UInt16[] beginsYears = sortedYears.Take(beginsCount).ToArray(); UInt16[] finishYears = sortedYears.Skip(1).ToArray(); UInt16[][] sortedZiped = beginsYears.Zip(finishYears, (x, y) => new UInt16[] { x, y }).ToArray(); this.Milestones = sortedZiped.Select((x) => SeqOfYears.TransformYearsToSpans(x.First(), x.Last())).ToArray(); }