Пример #1
0
        public override IEnumerator <SortOrderModel> GetEnumerator()
        {
            foreach (var src in RankCaches)
            {
                var prob = new ProblemStatisticsModel[Problems.Count];
                for (int i = 0; i < Problems.Count; i++)
                {
                    prob[i] = new ProblemStatisticsModel();
                }

                var teams = new List <TeamModel>();
                int rank = 0, last_rank = 0;
                (int point, int penalty, int lastac)last = (int.MinValue, int.MinValue, int.MinValue);
                foreach (var item in src)
                {
                    if (!Affiliations.ContainsKey(item.AffiliationId) ||
                        !Categories.ContainsKey(item.CategoryId) ||
                        !(FilteredAffiliations?.Contains(item.AffiliationId) ?? true) ||
                        !(FilteredCategories?.Contains(item.CategoryId) ?? true) ||
                        (!Categories[item.CategoryId].IsPublic && !ShowHiddenCategories))
                    {
                        continue;
                    }

                    var team = CreateTeamViewModel(
                        item,
                        Affiliations[item.AffiliationId],
                        Categories[item.CategoryId],
                        IsPublic,
                        prob);

                    rank++;
                    var now = (team.Points, team.Penalty, team.LastAc);
                    if (last != now)
                    {
                        (last_rank, last) = (rank, now);
                    }

                    team.ContestId = IsPublic ? default(int?) : ContestId;
                    team.Rank      = last_rank;
                    team.ShowRank  = last_rank == rank;
                    teams.Add(team);
                }

                if (teams.Count == 0)
                {
                    continue;
                }
                yield return(new SortOrderModel(teams, prob));
            }
        }