> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 根据统计信息为玩家排名

> 将 PlayFab 排行榜与统计信息定义相关联，使玩家统计信息的更新自动填充排行榜条目，按跟踪的值对玩家进行排名。

在本教程中，我们将学习如何一起使用排行榜和统计信息服务。最终的结果是，当在实体上更新统计信息时，会自动反映在相应的排行榜上。有关 PlayFab 统计信息的更多信息，请参见 \[统计信息概述]\([PlayFab 统计信息概述](/services/playfab/player-progression/statistics))。

我们先从一款同时使用两种服务的射击游戏示例开始。这里我们将利用 [创建基础统计信息](/services/playfab/player-progression/statistics/create-basic-statistics) 的教程，并继续假设我们已经为该游戏创建了统计信息。现在，我们希望在每场比赛中玩家每次击中远距离射击时进行跟踪。我们将拥有一个统计信息，用于记录玩家的最佳远距离射击；以及一个排行榜，其中列出了击中远距离射击的最佳玩家。

## 创建与统计信息关联的排行榜

第一步是创建一个可以将统计信息服务跟踪到的信息作为输入的排行榜定义。以下示例演示如何使用 C# SDK 创建排行榜定义。

```C# theme={null}

public static async Task CreateStatLinkedLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName, string statName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        EntityType = EntityType,
        Name = leaderboardName,
        SizeLimit = 1000,
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Distance",
                SortDirection = LeaderboardSortDirection.Descending,
                LinkedStatisticColumn = new LinkedStatisticColumn()
                {
                    LinkedStatisticName = statName,
                    LinkedStatisticColumnName = "Distance",
                }
            },
            new LeaderboardColumn()
            {
                Name = "Caliber of the bullet",
                SortDirection = LeaderboardSortDirection.Ascending,
                LinkedStatisticColumn = new LinkedStatisticColumn()
                {
                    LinkedStatisticName = statName,
                    LinkedStatisticColumnName = "Caliber",
                }
            }
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

现在，让我们解释与之前创建的其他排行榜定义的主要区别。请注意 `LeaderboardColumn` 对象具有一个名为 `LinkedStatisticColumn` 的属性，它使我们能够在统计信息和排行榜之间创建关联。我们需要指定统计信息名称以及该统计信息中的列名，以进行映射。

通过这样做，我们使用统计信息服务跟踪玩家的进度。然后排行榜服务使用此信息并填充所关联的排行榜。

## 取消排行榜与统计信息的关联

如果需要，服务还具有从排行榜取消统计信息关联的机制。开发者可能想要执行此操作的原因有多种，例如测试不同的配置或映射不同的统计信息。以下示例演示了如何使用 C# SDK 取消排行榜与统计信息的关联。

```C# theme={null}
public static async Task UnlinkLeaderboard(PlayFabAuthenticationContext context, string statName, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);

    UnlinkLeaderboardFromStatisticRequest unlinkLbRequest = new UnlinkLeaderboardFromStatisticRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        StatisticName = statName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> lbResponse = await leaderboardsAPI.UnlinkLeaderboardFromStatisticAsync(unlinkLbRequest);
}
```

有了此信息，我们可以在需要时关联和取消关联排行榜的统计信息。有一些重要的约束需要牢记：

* 排行榜不能直接更新，应始终通过统计信息更新来利用自动机制。
* 排行榜不能独立于统计信息递增其版本。
* 除非我们经过取消关联过程，否则无法删除排行榜。

## 结论

在本教程中，我们学习了如何创建由统计信息驱动的排行榜以及如何取消服务之间的关联。有关其他功能的更多信息，请参见以下页面：

* [创建基础排行榜](/services/playfab/community/leaderboards/create-basic-leaderboard)。
* [赛季排行榜](/services/playfab/community/leaderboards/seasonal-leaderboards)。
* [组排行榜](/services/playfab/community/leaderboards/group-leaderboards)。
* [限制](/services/playfab/community/leaderboards/limits-leaderboards)。
* [配额](/services/playfab/community/leaderboards/quota-leaderboards)。
* [手动等级](/services/playfab/community/leaderboards/manual-tiers)。
* [排行榜的更多用法](/services/playfab/community/leaderboards/doing-more-with-leaderboards)。
* [向排行榜添加上下文数据](/services/playfab/community/leaderboards/metadata-leaderboards)。
* [API 参考](/services/playfab/community/leaderboards/api-reference)。
* [排行榜和 Cloudscript](/services/playfab/community/leaderboards/leaderboards-cloudscript)。
* [使用 Playstream 的排行榜](/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [API 排行榜参考](/zh-CN/services/playfab/community/leaderboards/api-reference.md)
- [排行榜的更多用法](/zh-CN/services/playfab/community/leaderboards/doing-more-with-leaderboards.md)
- [使用 Azure Functions 的排行榜](/zh-CN/services/playfab/community/leaderboards/leaderboards-cloudscript.md)
- [创建基础排行榜](/zh-CN/services/playfab/community/leaderboards/create-basic-leaderboard.md)
- [组排行榜](/zh-CN/services/playfab/community/leaderboards/group-leaderboards.md)
