C # сортировка списка по нескольким условиям - PullRequest
2 голосов
/ 08 декабря 2009

Мне нужно отсортировать футбольные таблицы. Моя проблема в том, как сортировать в правильном порядке.

SortOrder:

  • Очки DESC
  • Аппроксимационный матч
  • Разница мячей DESC
  • Забитых голов DESC
  • Голы против

Входной сигнал: TeamName - Очки - Забитые голы - GoalsAgainst

  • Команда 1 - 1 - 4 - 7
  • Команда 2 - 5 - 8 - 6
  • Команда 3 - 1 - 2 - 10
  • Команда 4 - 8 - 12 - 5
  • Команда 5 - 5 - 7 - 4

... Матч № 4 - Команда 5 - Команда 2 - 1-2

Матч № 7 - Команда 1 - Команда 3 - 3-3 ...

Выход: TeamName - Очки - Забитые голы - GoalsAgainst

  • Команда 4 - 8 - 12 - 5
  • Команда 2 - 5 - 8 - 6
  • Команда 5 - 5 - 7 - 4
  • Команда 1 - 1 - 4 - 7
  • Команда 3 - 1 - 2 - 10

Поскольку команда 2 выиграла у команды 5, они оказались на втором месте.

Поскольку команда 1 сыграет вничью с командой 3, они окажутся на 4-м месте с лучшей разницей голов.

public class Standing
{
    public Team Team { get; set; }
    public int? MatchesPlayed { get; set; }
    public int? GoalsScored { get; set; }
    public int? GoalsAgainst { get; set; }
    public int? Points { get; set; }
}

public class Match
{
    public int MatchID { get; set; }
    public DateTime? PlayTime { get; set; }
    public Team HomeTeam { get; set; }
    public Team AwayTeam { get; set; }
    public int? HomeScore { get; set; }
    public int? AwayScore { get; set; }
}

public class Pool
{
    public int PoolID { get; set; }
    public string PoolName { get; set; }
    public DateTime? StartTime { get; set; }
    public List<Team> Teams { get; set; }
    public List<Match> Matches { get; set; }
    public List<Standing> Standings { get; set; }
}

Ответы [ 4 ]

18 голосов
/ 08 декабря 2009

Можете ли вы использовать .NET 3.5? Для этого довольно просто использовать методы расширения LINQ OrderBy и ThenBy.

6 голосов
/ 08 декабря 2009

Я думаю, вам следует проверить интерфейс IComparable и рассмотреть возможность его реализации поверх ваших объектов.

1 голос
/ 08 декабря 2009

Если ваши данные хранятся в базе данных (не так ли?), То вы можете отсортировать запрос select с помощью ORDER BY. В результате структура данных C # будет в следующем порядке.

0 голосов
/ 08 декабря 2009

Вы хотите написать себе функцию сравнения и передать ее в метод сортировки.

Если у одной команды больше очков, укажите, что эта команда «больше».

Если у обеих команд одинаковое количество очков, посмотрите на разницу мячей и используйте ее, чтобы определить, какая команда «больше».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...