

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例：使用明確排序來尋找最佳相符項目
<a name="match-examples-4"></a>

此範例會設定兩個隊伍的簡單配對，這兩個隊伍各包含三個玩家。此範例說明如何利用明確排序的規則，來協助您盡快找到最佳的可能配對。這些規則會排序所有作用中的配對票證，以根據特定金鑰需求建立最佳相符項目。此範例會依照下列指示實作：
+ 建立兩個玩家隊伍。
+ 在每個隊伍中加入 3 個玩家。
+ 加入下列的玩家屬性：
  + 體驗等級 (如果未提供，預設為 50)。
  + 偏好的遊戲模式 (可以列出多個值) (如果未提供，預設為「coop (合作)」和「deathmatch (死鬥)」)。
  + 偏好的遊戲地圖，包括地圖名稱和偏好的加權 (如果未提供，預設為 `"defaultMap"`，使用加權 100)。
+ 設定預先排序：
  + 根據玩家對於和主錨玩家相同遊戲地圖的偏好，來將玩家排序。玩家可以擁有多個最愛的遊戲地圖，所以這個範例使用偏好設定值。
  + 根據玩家的經驗等級與主錨玩家的接近程度，來將玩家排序。利用此種排序法，所有隊伍中的所有玩家就能夠盡可能地擁有相近的經驗值。
+ 所有隊伍的所有玩家必須至少選擇一個共同的遊戲模式。
+ 所有隊伍的所有玩家必須至少選擇一個共同的遊戲地圖。

使用此規則集的注意事項：
+ 遊戲地圖的排序，會使用比較 mapPreference 屬性值的絕對排序法。由於這是規則集內的第一個規則，所以會優先執行此排序。
+ 體驗排序則會使用距離排序來比較候選玩家的技能等級與主錨玩家的技能。
+ 排序會依其在規則集內的列出順序來執行。在此情境中，會先根據遊戲地圖的偏好設定，然後再根據經驗等級，來將玩家排序。

```
{
    "name": "multi_map_game",
    "ruleLanguageVersion": "1.0",
    "playerAttributes": [{
        "name": "experience",
        "type": "number",
        "default": 50
    }, {
        "name": "gameMode",
        "type": "string_list",
        "default": [ "deathmatch", "coop" ]
    }, {
        "name": "mapPreference",
        "type": "string_number_map",
        "default": { "defaultMap": 100 }
    }, {
        "name": "acceptableMaps",
        "type": "string_list",
        "default": [ "defaultMap" ]
    }],
    "teams": [{
        "name": "red",
        "maxPlayers": 3,
        "minPlayers": 3
    }, {
        "name": "blue",
        "maxPlayers": 3,
        "minPlayers": 3
    }],
    "rules": [{
        // We placed this rule first since we want to prioritize players preferring the same map
        "name": "MapPreference",
        "description": "Favor grouping players that have the highest map preference aligned with the anchor's favorite",
        // This rule is just for sorting potential matches.  We sort by the absolute value of a field.
        "type": "absoluteSort",
        // Highest values go first
        "sortDirection": "descending",
        // Sort is based on the mapPreference attribute.
        "sortAttribute": "mapPreference",
        // We find the key in the anchor's mapPreference attribute that has the highest value.
        // That's the key that we use for all players when sorting.
        "mapKey": "maxValue"
    }, {
        // This rule is second because any tie-breakers should be ordered by similar experience values
        "name": "ExperienceAffinity",
        "description": "Favor players with similar experience",
        // This rule is just for sorting potential matches.  We sort by the distance from the anchor.
        "type": "distanceSort",
        // Lowest distance goes first
        "sortDirection": "ascending",
        "sortAttribute": "experience"
    }, {
        "name": "SharedMode",
        "description": "The players must have at least one game mode in common",
        "type": "collection",
        "operation": "intersection",
        "measurements": [ "flatten(teams[*].players.attributes[gameMode])"],
        "minCount": 1
    }, {
        "name": "MapOverlap",
        "description": "The players must have at least one map in common",
        "type": "collection",
        "operation": "intersection",
        "measurements": [ "flatten(teams[*].players.attributes[acceptableMaps])"],
        "minCount": 1
    }]
}
```