目前,这只是我很好奇的事情,我没有任何我正在研究的代码,但我想知道如何实现这一目标......
让我们举例来说,我有一个应用程序可以追踪世界上所有足球队的成绩.我希望能够确定任何特定球队最长的"胜利"连胜纪录.
我想我很可能会有这样的数据表:
所以我想要做的就是找到最长的连胜位置TeamA = "My Team",显然这意味着TeamAGoals必须大于TeamBGoals.
正如我所说,这只是一个例子.对于这样的事情,对于不同的DB设计可能更好.但根本问题是如何计算匹配结果的最长条纹/运行.
您可以通过单个查询获得团队的所有结果:
var results = from m in Matches
let homeMatch = m.TeamA == teamName
let awayMatch = m.TeamB == teamName
let hasWon = (homeMatch && m.TeamAGoals > m.TeamBGoals) ||
(awayMatch && m.TeamBGoals > m.TeamAGoals)
where homeMatch || awayMatch
orderby m.MatchDate
select hasWon;
Run Code Online (Sandbox Code Playgroud)
然后简单计算最长连胜:
int longestStreak = 0;
int currentStreak = 0;
foreach (var hasWon in results)
{
if (hasWon)
{
currentStreak++;
if (currentStreak > longestStreak)
longestStreak = currentStreak;
continue;
}
currentStreak = 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以按原样使用它、提取到方法或创建 IEnumerable 扩展来计算结果中的最长序列。
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |