c# - 如何使用 LINQ 计算最长连胜?

标签 c# linq

目前,这只是我很好奇的事情,我没有正在处理的任何代码,但我想知道如何实现...

例如,我有一个应用程序可以跟踪世界上所有足球队的成绩。我想要做的是确定任何给定团队的最长“连胜”记录。

我想我很可能会有这样的数据表:

  • 匹配日期日期时间
  • TeamA 字符串
  • TeamB 字符串
  • TeamAGoals 积分
  • TeamBGoals int

例如,我想做的是找到最长的连胜纪录,其中 TeamA = "My Team" 显然这意味着 TeamAGoals 必须大于 TeamBGoals

正如我所说,这只是示例。对于这样的事情,不同的数据库设计可能会更好。但根本问题是如何计算匹配结果的最长连胜。

最佳答案

现在这是一个老问题,但我不得不自己解决同样的问题,并且认为人们可能对 Rawling 的 LongestStreak 扩展方法的完全 LINQ 实现感兴趣。这使用带有种子和结果选择器的聚合来遍历列表。

    public static int LongestStreak<TSource>(
        this IEnumerable<TSource> source,
        Func<TSource, bool> predicate)
    {
        return source.Aggregate(
            new {Longest = 0, Current = 0},
            (agg, element) => predicate(element) ? 
                new {Longest = Math.Max(agg.Longest, agg.Current + 1), Current = agg.Current + 1} : 
                new {agg.Longest, Current = 0},
            agg => agg.Longest);
    }

关于c# - 如何使用 LINQ 计算最长连胜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912873/

相关文章:

c# - 在制作动态 URL 时执行字符串连接的最佳方法是什么?

c# - 我面临着对 IEnumerable(LINQ) > List(RecyclerView) 的巨大性能影响

c# - 从类型集合中获取公共(public)基类的最简单方法

c# - 使用 Xml.Xpath 和 Xml.Linq 读取 XML 文件

c# - 先读取 IEnumerable 或等待其完成更改

c# - 捕获对 Web Api 2.0 的所有请求,无论是否已映射

c# - 你如何在 C# 中返回 'not uint'?

c# - 我应该处理哪些异常(exception)情况

c# - 如何将变量严格键入为特定 WMI 类?

c# - 如何在 linq 中有效地连接字符串?