vb.net中的头寸订单

塞缪尔

我正在做一个项目,得分最高的人将担任职位1,下一个人将成为职位2。例如,如果两个人的得分相同,他们将给出相同的职位,但接下来的人则是其他人,例如两个得分都为65将具有相同的位置,即1,而下一个内联将不是2而是3。

菲利普·特雷福德

这可以通过LINQ实现:

    ' Example user scores
    Dim userScores = {
        New With {.Score = 65, .Name = "Linda"},
        New With {.Score = 65, .Name = "Paul"},
        New With {.Score = 64, .Name = "John"},
        New With {.Score = 63, .Name = "Yoko"}
    }
    ' Transform user scores to a high score table
    Dim table = _
        userScores _
        .OrderByDescending(Function(user) user.Score) _
        .Select(Function(user, i) New With {.Index = i + 1, .User = user}) _
        .GroupBy(Function(row) row.User.Score) _
        .SelectMany(
            Function(group)
                Dim position = group.First().Index
                Return group.Select(
                    Function(row)
                    Return New With {.Position = position, .User = row.User}
                End Function)
            End Function)
    ' Print results
    For Each row In table
        Console.WriteLine("{0} {1} {2}", row.Position, row.User.Score, row.User.Name)
    Next

在这里,用户按分数排序(降序)。然后给每个用户一个索引。然后,将用户按得分分组。最后,使用SelectMany将组扁平化,并从组索引值的第一行开始分配每行的位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章