private static List<BusArrivalTime> InterleaveRouteScheduleAndEstimates(BusStopRouteSchedule routeSchedule, Dictionary<string, List<int>> stopEstimates, DateTimeOffset currentTime) { var arrivalTimes = Enumerable.Empty<BusArrivalTime>(); var daySchedule = routeSchedule.DaySchedules.FirstOrDefault(ds => DaysOfWeekUtils.IsToday(ds.Days, currentTime)); if (daySchedule != null) { var relativeSchedule = MakeRelativeScheduleWithinCutoff(daySchedule, currentTime); arrivalTimes = relativeSchedule.Select(minutes => new BusArrivalTime(minutes, isEstimate: false)); } if (stopEstimates.ContainsKey(routeSchedule.RouteNo)) { var routeEstimates = stopEstimates[routeSchedule.RouteNo]; arrivalTimes = arrivalTimes.Where(arrivalTime => !routeEstimates.Any(estimate => Math.Abs(arrivalTime.MinutesFromNow - estimate) <= ESTIMATE_CORRELATION_TOLERANCE_MINUTES)); arrivalTimes = arrivalTimes.Concat( routeEstimates.Select(estimate => new BusArrivalTime(estimate, isEstimate: true))); } arrivalTimes = arrivalTimes.OrderBy(arrivalTime => arrivalTime); return arrivalTimes.ToList(); }