2009-12-07 6 views
2

축구 순위를 정렬해야합니다. 내 문제는 올바른 순서로 정렬하는 방법입니다.C# 여러 조건으로 목록 정렬

SORTORDER :

  • 포인트 DESC
  • 근사 일치
  • 목표 차이 DESC
  • 목표는 DESC
  • 득점
  • 목표에 대한

입력 : TeamName - 포인트 - GoalsScored - GoalsAgainst

  • 팀 1-1 - 4-7
  • 팀 2-5 - 8-6
  • 3 팀 - 12-10
  • 팀 4 - 8 - 12-5
  • 팀 5 - 5 - 7 - 4

... 일치 # 4 - 팀 5 - 팀 2 - 1 ~

일치 # 7 - 테 오전 1시 - 팀 3 - 3-3 ...

출력 : TeamName - 포인트 - GoalsScored - GoalsAgainst

  • 팀 4 - 8 - 12-5
  • 2 팀 - 5 - 8-6
  • 팀 5-5 - 7-4
  • 팀 1-1 - 4-7
  • 팀 1 - 3 - 2 - 10

팀 2가 팀 5에서 승리했기 때문에 2 위가되었습니다.

팀 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; } 
} 

답변

18

.NET 3.5를 사용할 수 있습니까? 이를 위해 LINQ OrderByThenBy 확장 방법을 사용하는 것이 매우 간단합니다.

+0

내 표를 가져옵니다. 그리고 2.0/3.0, LINQBridge (당신이 VS2008 이상을 가지고있는 한) –

+0

나는 내 자신의 대답보다이게 낫다고 생각합니다. –

+1

2.0에'List .Sort (비교 )'와 익명의 위임자가 있다면'OrderBy'와'ThenBy'는 여기서 무엇이 개선 될까요? 다중 필드 비교를위한 비교 술어를 작성하는 것은 상당히 간단합니다. –

6

나는 당신이 IComparable 인터페이스를 확인하고 개체 (들)에 그것을 구현하는 것을 고려해야한다고 생각합니다.

0

자신을 비교 함수로 작성하여 sort 메소드로 전달하려고합니다.

한 팀에 더 많은 포인트가있는 경우 해당 팀이 "커"임을 나타냅니다.

두 팀의 점수가 같으면 목표 차이점을보고이를 사용하여 "큰"팀을 결정하십시오.

+0

내 문제는 목표 차이를보기 전에 동일한 점수를 가진 팀 간의 경기를 봐야한다는 것입니다. – Frets

+0

그럼요? 그럼 해. 'if team1.score! = team2.score return team1.score - team2.score; 만약 team1.goaldiff! = team2.goaldiff return team1.goaldiff - team2.goaldiff; return team1.goalsscored - team2.goalsscored;' –

1

데이터가 데이터베이스에 저장되어 있다면 (그렇습니까?) 그러면 ORDER BY를 사용하여 선택 쿼리를 정렬 할 수 있습니다. 그 결과 C# 데이터 구조가 순서대로됩니다.