vb.net 中的头寸顺序

Position Order in 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 将组展平,每行的位置从组索引值的第一行开始分配。