

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

# FlexMatch 規則語言
<a name="match-rules-reference"></a>

本節中的參考主題描述用於建置配對規則以搭配 Amazon GameLift Servers 使用的語法和語意FlexMatch。如需撰寫配對規則和規則集的詳細說明，請參閱 [建置FlexMatch規則集](match-rulesets.md)。

**Topics**
+ [FlexMatch 規則集結構描述](match-ruleset-schema.md)
+ [FlexMatch 規則集屬性定義](match-ruleset-property-definitions.md)
+ [FlexMatch 規則類型](match-rules-reference-ruletype.md)
+ [FlexMatch 屬性表達式](match-rules-reference-property-expression.md)

# FlexMatch 規則集結構描述
<a name="match-ruleset-schema"></a>

FlexMatch 規則集會將標準結構描述用於小型配對和大型配對規則。如需每個區段的詳細說明，請參閱 [FlexMatch 規則集屬性定義](match-ruleset-property-definitions.md)。

## 小型配對的規則集結構描述
<a name="match-ruleset-schema-small"></a>

下列結構描述會記錄規則集的所有可能屬性和允許值，用於最多 40 名玩家的建置配對。

```
{
    "name": "string",
    "ruleLanguageVersion": "1.0",
    "playerAttributes":[{ 
         "name": "string,
         "type": <"string", "number", "string_list", "string_number_map">,
         "default": "string"
    }],
    "algorithm": {
        "strategy": "exhaustiveSearch",
        "batchingPreference": <"random", "sorted">,
        "sortByAttributes": [ "string" ],
        "expansionAgeSelection": <"newest", "oldest">,
        "backfillPriority": <"normal", "low", "high">
    },
    "teams": [{
        "name": "string",
        "maxPlayers": number,
        "minPlayers": number,
        "quantity": integer
    }],
    "rules": [{
        "type": "distance",
        "name": "string",
        "description": "string",
        "measurements": "string",
        "referenceValue": number, 
        "maxDistance": number,
        "minDistance": number,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "comparison",
        "name": "string",
        "description": "string",
        "measurements": "string",
        "referenceValue": number, 
        "operation": <"<", "<=", "=", "!=", ">", ">=">,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "collection",
        "name": "string",
        "description": "string",
        "measurements": "string",
        "referenceValue": number,
        "operation": <"intersection", "contains", "reference_intersection_count">,
        "maxCount": number,
        "minCount": number,
        "partyAggregation": <"union", "intersection">
        },{
        "type": "latency",
        "name": "string",
        "description": "string",
        "maxLatency": number,
        "maxDistance": number,
        "distanceReference": number, 
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "distanceSort",
        "name": "string",
        "description": "string",
        "sortDirection": <"ascending", "descending">,
        "sortAttribute": "string", 
        "mapKey": <"minValue", "maxValue">,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "absoluteSort",
        "name": "string",
        "description": "string",
        "sortDirection": <"ascending", "descending">,
        "sortAttribute": "string", 
        "mapKey": <"minValue", "maxValue">,
        "partyAggregation": <"avg", "min", "max">
        },{
        "type": "compound",
        "name": "string",
        "description": "string",
        "statement": "string"
        }
    }],
    "expansions": [{
        "target": "string",
        "steps": [{
            "waitTimeSeconds": number,
            "value": number
        }, {
            "waitTimeSeconds": number,
            "value": number
        }]
    }]
}
```

# 大型比對的規則集結構描述
<a name="match-ruleset-schema-large"></a>

下列結構描述會記錄規則集的所有可能屬性和允許值，用於建置超過 40 名玩家的配對。如果規則集中所有團隊`maxPlayers`的值總計超過 40，則 FlexMatch會處理根據大型比對準則使用此規則集的比對請求。

```
{
    "name": "string",
    "ruleLanguageVersion": "1.0",
    "playerAttributes":[{ 
         "name": "string,
         "type": <"string", "number", "string_list", "string_number_map">,
         "default": "string"
    }],
    "algorithm": {
        "strategy": "balanced",
        "batchingPreference": <"largestPopulation", "fastestRegion">,
        "balancedAttribute": "string",
        "expansionAgeSelection": <"newest", "oldest">,
        "backfillPriority": <"normal", "low", "high">
    },
    "teams": [{
        "name": "string",
        "maxPlayers": number,
        "minPlayers": number,
        "quantity": integer
    }],
    "rules": [{
        "name": "string",
        "type": "latency",
        "description": "string",
        "maxLatency": number,
        "partyAggregation": <"avg", "min", "max">
    }, {
        "name": "string",
        "type": "batchDistance",
        "batchAttribute": "string",
        "maxDistance": number
    }],
    "expansions": [{
        "target": "string",
        "steps": [{
            "waitTimeSeconds": number,
            "value": number
        }, {
            "waitTimeSeconds": number,
            "value": number
        }]
    }]
}
```

# FlexMatch 規則集屬性定義
<a name="match-ruleset-property-definitions"></a>

本節定義規則集結構描述中的每個屬性。如需建立規則集的其他說明，請參閱 [建置FlexMatch規則集](match-rulesets.md)。

**`name`**  
規則集的描述性標籤。此值與指派給 Amazon GameLift Servers [MatchmakingRuleSet 資源](https://docs.aws.amazon.com/gamelift/latest/apireference/API_MatchmakingRuleSet.html)的名稱無關。此值會包含在描述已完成配對的配對資料中，但不會用於任何Amazon GameLift Servers程序。  
允許的值：字串  
是否為必要？ 否

**`ruleLanguageVersion`**  
正在使用的 FlexMatch 屬性表達式語言版本。  
允許的值："1.0"  
是否為必要？ 是

**`playerAttributes`**  
包含在配對請求中的玩家資料集合，用於配對程序。您也可以在此處宣告屬性，讓玩家資料包含在傳遞至遊戲伺服器的配對資料中，即使資料未用於配對程序。  
是否為必要？ 否    
**`name`**  
配對建構器要使用的玩家屬性的唯一名稱。此名稱必須符合配對請求中參考的玩家屬性名稱。  
允許的值：字串  
是否為必要？ 是  
**`type`**  
玩家屬性值的資料類型。  
允許的值："string"、"number"、"string\$1list"、"string\$1number\$1map"  
是否為必要？ 是  
**`default `**  
當配對請求未提供玩家時要使用的預設值。  
允許的值：播放器屬性允許的任何值。  
是否為必要？ 否 

**`algorithm`**  
自訂配對程序的選用組態設定。  
是否為必要？ 否    
**`strategy`**  
建置相符項目時要使用的 方法。如果未設定此屬性，則預設行為為「exhaustiveSearch」。  
允許的值：  
+ 「exhaustiveSearch」 – 標準比對方法。 會根據一組自訂FlexMatch比對規則，評估集區中的其他票證，在批次中形成最舊票證的比對。此策略用於 40 名或更少玩家的配對。使用此策略時， `batchingPreference`應設定為「隨機」或「排序」。
+ "balanced" – 最佳化以快速形成大型配對的方法。此策略僅用於 41 到 200 名玩家的配對。它透過預先排序票證集區、建立潛在配對並將玩家指派給隊伍，然後使用指定的玩家屬性平衡配對中的每個隊伍來形成配對。例如，此策略可用來平衡配對中所有團隊的平均技能水準。使用此策略時， `balancedAttribute` 必須設定 ，且 `batchingPreference`應設定為「largestPopulation」或「fastestRegion」。此策略無法辨識大多數自訂規則類型。
是否為必要？ 是  
**`batchingPreference`**  
分組配對建置票證之前要使用的預先排序方法。預先排序票證集區會導致根據特定特徵將票證批次在一起，這往往會增加最終配對中玩家之間的一致性。  
允許的值：  
+ "random" – 僅適用於 `strategy` = "exhaustiveSearch"。未完成預先排序；集區中的票證會隨機批次處理。這是詳盡搜尋策略的預設行為。
+ "sorted" – 僅適用於 `strategy` = "exhaustiveSearch"。票證集區會根據 中列出的玩家屬性預先排序`sortbyAttributes`。
+ "largestPopulation" – 僅適用於 `strategy` = "balanced"。票證集區會依玩家回報可接受延遲層級的區域預先排序。這是平衡策略的預設行為。
+ "fastestRegion" – 僅適用於 `strategy` = "balanced"。票證集區會依玩家回報其最低延遲等級的區域預先排序。產生的配對需要更長的時間才能完成，但所有玩家的延遲往往很低。
是否為必要？ 是  
**`balancedAttribute`**  
使用平衡策略建置大型配對時要使用的玩家屬性名稱。  
允許的值：`playerAttributes`在 中宣告且 `type` = "number" 的任何屬性。  
是否為必要？ 是，如果 `strategy` = "balanced"。  
**`sortByAttributes`**  
在批次處理之前預先排序票證集區時要使用的玩家屬性清單。只有在使用詳盡的搜尋策略預先排序時，才會使用此屬性。屬性清單的順序決定排序順序。 使用 Alpha 和數值FlexMatch的標準排序慣例。  
允許的值：在 中宣告的任何屬性`playerAttributes`。  
是否為必要？ 是，如果 `batchingPreference` = "sorted"。  
**`backfillPriority`**  
符合回填票證的優先順序方法。此屬性會決定何時在批次中FlexMatch處理回填票證。只有在使用詳盡的搜尋策略預先排序時才會使用它。如果未設定此屬性，則預設行為為「正常」。  
允許的值：  
+ "normal" – 形成相符項目時，不會考慮票證的請求類型 （回填或新相符項目）。
+ "high" – 票證批次會依請求類型 （然後依年齡排序） 排序，並FlexMatch嘗試先比對回填票證。
+ 「低」：票證批次會依請求類型 （然後依年齡排序） 排序，並FlexMatch嘗試先比對未回填的票證。
是否為必要？ 否  
**`expansionAgeSelection`**  
計算相符規則擴展的等待時間的方法。如果在經過一定的時間後仍未完成配對，則擴展會用來放寬配對要求。等待時間是根據已在部分填充配對中票證的存留期計算。如果未設定此屬性，則預設行為為「最新」。  
允許的值：  
+ 「最新」：擴展等待時間是根據部分完成配對中具有最新建立時間戳記的票證計算。擴展觸發速度較慢，因為較新的票證可以重新啟動等待時鐘。
+ 「最舊」：擴充等待時間是根據相符項目中建立時間戳記最舊的票證來計算。擴展通常會更快觸發。
是否為必要？ 否

**`teams`**  
配對中團隊的組態。為每個團隊提供團隊名稱和大小範圍。規則集必須至少定義一個團隊。    
**`name`**  
團隊的唯一名稱。團隊名稱可以在規則和擴展中參考。在成功配對時，玩家會依配對資料中的隊伍名稱指派。  
允許的值：字串  
是否為必要？ 是  
**`maxPlayers`**  
可指派給團隊的玩家數量上限。  
允許的值：數字  
是否為必要？ 是  
**`minPlayers`**  
在配對可行之前，必須指派給隊伍的玩家人數下限。  
允許的值：數字  
是否為必要？ 是  
**`quantity`**  
要在配對中建立的此類型團隊數量。數量大於 1 的團隊會以附加數字 ("Red\$11"、"Red\$12" 等） 指定。如果未設定此屬性，預設值為 "1"。  
允許的值：數字  
是否為必要？ 否

**`rules`**  
定義如何評估玩家配對的規則陳述式集合。  
是否為必要？ 否    
**`name`**  
規則的唯一名稱。規則集中的所有規則都必須具有唯一的名稱。在追蹤規則相關活動的事件日誌和指標中，會參考規則名稱。  
允許的值：字串  
是否為必要？ 是  
**`description`**  
規則的文字描述。此資訊可用於識別規則的目的。它不會用於配對程序。  
允許的值：字串  
是否為必要？ 否  
**`type`**  
規則陳述式的類型。每個規則類型都有必須設定的其他屬性。如需每個規則類型的結構和使用詳細資訊，請參閱 [FlexMatch 規則類型](match-rules-reference-ruletype.md)。  
允許的值：  
+ "absoluteSort" – 根據指定的玩家屬性是否與批次中最舊的票證進行比較，使用明確排序方法來排序批次中的票證。
+ 「集合」 – 評估集合中的值，例如集合的玩家屬性，或多個玩家的一組值。
+ "comparison" – 比較兩個值。
+ "compound" – 使用規則集中其他規則的邏輯組合來定義複合配對規則。僅支援 40 名或更少玩家的配對。
+ "distance" – 測量數值之間的距離。
+ "batchDistance" – 測量屬性值之間的差異，並使用它來分組相符請求。
+ "distanceSort" – 根據指定玩家屬性與批次中最舊的票證的比較，使用明確排序方法來排序批次中的票證。
+ "latency" – 評估針對配對請求報告的區域延遲資料。
是否為必要？ 是

**`expansions`**  
當無法完成配對時，隨時間放寬配對要求的規則。將擴展設定為一系列逐步套用的步驟，以便更容易找到相符項目。根據預設， 會根據新增至配對的最新票證存留期來FlexMatch計算等待時間。您可以使用演算法屬性 來變更計算擴展等待時間的方式`expansionAgeSelection`。  
擴展等待時間是絕對值，因此每個步驟的等待時間應該比上一個步驟長。例如，若要排程漸進一系列的擴展，您可以使用 30 秒、40 秒和 50 秒的等待時間。等待時間不能超過配對請求允許的最長時間，該請求是在配對組態中設定。  
是否為必要？ 否    
**`target`**  
要放寬的規則集元素。您可以放寬團隊大小屬性或任何規則陳述式屬性。語法為「<component name>【<rule/team name>】.<property name>」。例如，若要變更團隊大小下限：`teams[Red, Yellow].minPlayers`。若要在名為 "minSkill" 的比較規則陳述式中變更最低技能需求：`rules[minSkill].referenceValue`。  
是否為必要？ 是  
**`steps`**    
**`waitTimeSeconds`**  
套用目標規則集元素的新值之前等待的時間長度，以秒為單位。  
是否為必要？ 是  
**`value`**  
目標規則集元素的新值。

# FlexMatch 規則類型
<a name="match-rules-reference-ruletype"></a>

## 批次距離規則
<a name="match-rules-reference-ruletype-batchdistance"></a>

```
batchDistance
```

批次距離規則會測量兩個屬性值之間的差異。您可以對大型和小型相符項目使用批次距離規則類型。批次距離規則有兩種類型：
+ *比較數值屬性值*。例如，此類型的批次距離規則可能需要配對中的所有玩家彼此在兩個技能層級內。對於此類型，定義所有票證`batchAttribute`的 之間的最大距離。
+ *比較字串屬性值*。例如，此類型的批次距離規則可能需要配對中的所有玩家請求相同的遊戲模式。針對此類型，定義 FlexMatch 用來形成批次`batchAttribute`的值。

**批次距離規則屬性**
+ **`batchAttribute`** – 用來形成批次的玩家屬性值。
+ **`maxDistance`** – 成功配對的最大距離值。用來比較數值屬性。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

**Example**  
範例  

```
{
  "name":"SimilarSkillRatings",
  "description":"All players must have similar skill ratings",
  "type":"batchDistance",
  "batchAttribute":"SkillRating",
  "maxDistance":"500"
}
```

```
{
  "name":"SameGameMode",
  "description":"All players must have the same game mode",
  "type":"batchDistance",
  "batchAttribute":"GameMode"
}
```

## 比較規則
<a name="match-rules-reference-ruletype-comparison"></a>

```
comparison
```

比較規則會將玩家屬性值與另一個值進行比較。比較規則有兩種類型：
+ *與參考值比較*。例如，此類型的比較規則可能需要符合的玩家具有特定的技能水準或更高。對於此類型，請指定玩家屬性、參考值和比較操作。
+ *比較玩家*。例如，此類型的比較規則可能需要配對中的所有玩家使用不同的字元。對於此類型，請指定玩家屬性和等於 (`=`) 或不等於 (`!=`) 比較操作。請勿指定參考值。

**注意**  
批次距離規則在比較玩家屬性方面更有效率。若要減少配對延遲，請盡可能使用批次距離規則。

**比較規則屬性**
+ **`measurements`** – 要比較的玩家屬性值。
+ **`referenceValue`** – 要針對潛在相符項目比較測量值與 的值。
+ **`operation`** – 決定如何比較測量值與參考值的值。有效操作包括：`<`、`<=`、`=`、`!=`、`>`、`>=`。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

## 距離規則
<a name="match-rules-reference-ruletype-distance"></a>

```
distance
```

距離規則會測量兩個數值之間的差異，例如玩家技能等級之間的距離。例如，距離規則可能需要所有玩家都玩遊戲至少 30 小時。

**注意**  
批次距離規則在比較玩家屬性方面更有效率。若要減少配對延遲，請盡可能使用批次距離規則。

**距離規則屬性**
+ **`measurements`** – 要測量距離的玩家屬性值。這必須是具有數值的屬性。
+ **`referenceValue`** – 測量潛在配對距離的數值。
+ **`minDistance`/`maxDistance`** – 成功配對的最小或最大距離值。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

## 集合規則
<a name="match-rules-reference-ruletype-collection"></a>

```
collection
```

集合規則會將一組玩家屬性值與批次中其他玩家的值或參考值進行比較。集合可以包含多個玩家的屬性值、做為字串清單的玩家屬性，或兩者。例如，集合規則可能會查看隊伍中玩家選擇的字元。然後，規則可能要求團隊至少擁有一個特定字元。

**集合規則屬性**
+ **`measurements`** – 要比較的玩家屬性值集合。屬性值必須是字串清單。
+ **`referenceValue`** – 用來比較潛在比對之測量的值 （或值集合）。
+ **`operation`** – 決定如何比較測量集合的值。有效操作包括下列項目：
  + `intersection` – 此操作會測量所有玩家集合中相同的值數量。如需使用交集操作的規則範例，請參閱 [範例：使用明確排序來尋找最佳相符項目](match-examples-4.md)。
  + `contains` – 此操作會測量包含指定參考值的玩家屬性集合數目。如需使用 包含 操作的規則範例，請參閱 [範例：設定團隊層級需求和延遲限制](match-examples-3.md)。
  + `reference_intersection_count` – 此操作會測量玩家屬性集合中符合參考值集合中項目的項目數量。您可以使用此操作來比較多個不同的玩家屬性。如需比較多個玩家屬性集合的規則範例，請參閱 [範例：尋找跨多個玩家屬性的交集](match-examples-5.md)。
+ **`minCount`/`maxCount`** – 成功配對的最小或最大計數值。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。對於此值，您可以使用 `union`來合併隊伍中所有玩家的玩家屬性。或者，您可以使用 `intersection` 來使用一方共同的玩家屬性。預設值為 `union`。

## 複合規則
<a name="match-rules-reference-ruletype-compound"></a>

```
compound
```

複合規則使用邏輯陳述式來形成 40 名或更少玩家的配對。您可以在單一規則集中使用多個複合規則。使用多個複合規則時，所有複合規則都必須為 true 才能形成相符項目。

您無法使用擴展規則[擴展複合規則](match-rulesets-components-algorithm.md#match-rulesets-components-algorithm-expansion)，但您可以擴展基礎或支援規則。

**複合規則屬性**
+ **`statement`** – 用來結合個別規則以形成複合規則的邏輯。您在此屬性中指定的規則必須已在規則集的先前定義。您無法在複合`batchDistance`規則中使用規則。

  此屬性支援下列邏輯運算子：
  + `and` – 如果兩個提供的引數為 true，表示表達式為 true。
  + `or` – 如果兩個提供的引數之一為 true，則表達式為 true。
  + `not` – 反轉表達式中引數的結果。
  + `xor` – 如果只有一個引數為 true，則表達式為 true。

**Example 範例**  
下列範例會根據玩家選取的遊戲模式，比對不同技能等級的玩家。  

```
{
    "name": "CompoundRuleExample",
    "type": "compound",
    "statement": "or(and(SeriousPlayers, VeryCloseSkill), and(CasualPlayers, SomewhatCloseSkill))"
}
```

## 延遲規則
<a name="match-rules-reference-ruletype-latency"></a>

```
latency
```

延遲規則會測量每個位置的玩家延遲。延遲規則會忽略延遲高於最大值的任何位置。玩家在至少一個位置的延遲值必須低於最大值，延遲規則才能接受它們。您可以指定 `maxLatency` 屬性，將此規則類型與大型相符項目搭配使用。

**延遲規則屬性**
+ **`maxLatency`** – 位置可接受的延遲上限值。如果票證沒有延遲低於最大值的位置，則票證不符合延遲規則。
+ **`maxDistance`** – 每個票證的延遲與距離參考值之間的最大值。
+ **`distanceReference`** – 要比較票證延遲的延遲值。在距離參考值最大距離內的票證會導致成功配對。有效選項包括最低 (`min`) 和平均 (`avg`) 玩家延遲值。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

**注意**  
佇列可以將遊戲工作階段放置在不符合延遲規則的區域。如需佇列延遲政策的詳細資訊，請參閱[建立玩家延遲政策](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/queues-design.html#queues-design-latency)。

## 絕對排序規則
<a name="match-rules-reference-ruletype-absolute"></a>

```
absoluteSort
```

相較於新增至批次的第一個票證，絕對排序規則會根據指定的玩家屬性來排序一批配對票證。

**絕對排序規則屬性**
+ **`sortDirection`** – 排序配對票證的順序。有效選項包括 `ascending`和 `descending`。
+ **`sortAttribute`** – 排序票證的玩家屬性。
+ **`mapKey`** – 排序玩家屬性的選項，如果是地圖的話。有效的選項包含：
  + `minValue` – 值最低的金鑰為第一個。
  + `maxValue` – 具有最高值的金鑰優先。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括玩家屬性下限 (`min`)、玩家屬性上限 (`max`)，以及隊伍中玩家所有玩家屬性的平均值 (`avg`)。預設值為 `avg`。

**Example**  
範例  
下列範例規則會依技能層級排序玩家，並平均各方的技能層級。  

```
{
    "name":"AbsoluteSortExample",
    "type":"absoluteSort",
    "sortDirection":"ascending",
    "sortAttribute":"skill",
    "partyAggregation":"avg"
}
```

## 距離排序規則
<a name="match-rules-reference-ruletype-distancesort"></a>

```
distanceSort
```

距離排序規則會根據指定玩家屬性與新增至批次的第一個票證的距離，來排序一批配對票證。

**距離排序規則屬性**
+ **`sortDirection`** – 排序配對票證的方向。有效選項包括 `ascending`和 `descending`。
+ **`sortAttribute`** – 排序票證的玩家屬性。
+ **`mapKey`** – 排序玩家屬性的選項，如果是地圖的話。有效的選項包含：
  + `minValue` – 針對新增至批次的第一個票證，尋找值最低的索引鍵。
  + `maxValue` – 針對新增至批次的第一個票證，尋找具有最高值的金鑰。
+ **`partyAggregation`** – 決定 如何處理具有多個玩家 （各方） 之FlexMatch票證的值。有效選項包括門票玩家的最小值 (`min`)、最大值 (`max`) 和平均值 (`avg`)。預設值為 `avg`。

# FlexMatch 屬性表達式
<a name="match-rules-reference-property-expression"></a>

屬性表達式可用來定義特定配對相關屬性。它們可讓您在定義屬性值時使用計算和邏輯。屬性表達式通常會產生兩種形式之一：
+ 個別玩家資料。
+ 計算個別玩家資料的集合。

## 常見的配對屬性表達式
<a name="match-rules-reference-property-expression-common"></a>

屬性表達式可識別玩家、團隊或配對的特定值。以下部分表達式說明了如何辨識團隊和玩家：


| 目標 | Input | 意義 | Output | 
| --- | --- | --- | --- | 
| 辨識配對中的特定團隊： | teams[red] | 紅隊 | 團隊  | 
| 若要識別配對中的一組特定團隊： | teams[red,blue] | 紅隊和藍隊 | List<Team> | 
| 辨識配對中的所有團隊： | teams[\$1] | 所有團隊 | List<Team> | 
| 辨識特定團隊中的玩家： | team[red].players | 紅隊中的玩家  | List<Player> | 
| 若要在配對中識別一組特定隊伍中的玩家： | team[red,blue].players | 配對的玩家，依照團隊分組 | List<List<Player>> | 
| 辨識配對中的玩家： | team[\$1].players | 配對的玩家，依照團隊分組 | List<List<Player>> | 

## 屬性表達式範例
<a name="match-rules-reference-property-expression-examples"></a>

下表說明一些以先前範例為基礎的屬性表達式：


****  

| 表達式 | 意義 | 結果類型 | 
| --- | --- | --- | 
|  `teams[red].players[playerId]`  | 紅隊所有玩家的玩家 ID | List<string> | 
| teams[red].players.attributes[skill] | 紅隊所有玩家的「技能」屬性 | List<number> | 
| teams[red,blue].players.attributes[skill] | 紅隊和藍隊上所有玩家的「技能」屬性，依隊伍分組 | List<List<number>> | 
| teams[\$1].players.attributes[skill] | 配對的所有玩家的「技能」屬性 (依照團隊分組) | List<List<number>> | 

## 屬性表達式彙總
<a name="match-rules-reference-property-expression-aggregation"></a>

屬性表達式可用於使用以下函式或組合函式來整合團隊資料：


****  

| 聚合 | Input | 意義 | Output | 
| --- | --- | --- | --- | 
| min | List<number> | 取得列表中所有數字的最小值。 | number | 
| max | List<number> | 取得列表中所有數字的最大值。 | number | 
| avg | List<number> | 取得列表中所有數字的平均值。 | number | 
| median | List<number> | 取得列表中所有數字的中間值。 | number | 
| sum | List<number> | 取得列表中所有數字的總和。 | number | 
| count | List<?> | 取得列表中所有元素的數量。 | number | 
| stddev | List<number> | 取得列表中所有數字的標準差。 | number | 
| flatten | List<List<?>> | 將嵌套清單的集合變成包含所有元素的單一清單。 | List<?> | 
| set\$1intersection | List<List<string>> | 取得在集合的所有字串清單中找到的字串清單。 | List<string> | 
| 以上全部 | List<List<?>> | 對嵌套列表的所有操作會對每個子列表執行一次以產生結果列表。 | List<?> | 

下表說明使用彙總函式的部分有效屬性表達式：


****  

| 表達式 | 意義 | 結果類型 | 
| --- | --- | --- | 
| flatten(teams[\$1].players.attributes[skill]) | 配對的所有玩家的「技能」屬性 (未分組) | List<number> | 
| avg(teams[red].players.attributes[skill]) | 紅隊玩家的平均技能 | number | 
| avg(teams【\$1】.players.attributes【skill】) | 配對中的每個團隊的平均技能 | List<number> | 
| avg(flatten(teams[\$1].players.attributes[skill])) | 配對中的所有玩家的平均技能級別。此表達式取得玩家技能的展平列表，然後計算它們的平均值。 | number | 
| count(teams[red].players) | 紅隊玩家的數量 | number | 
| count (teams[\$1].players) | 配對中的每個團隊的玩家數量 | List<number> | 
| max(avg(teams[\$1].players.attributes[skill])) | 配對中的最高團隊技能級別  | number | 