

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# switch


`switch` 在一组文本标签和 *return-expression* 配对中，将 *condition-expression* 与文本标签进行比较。然后，它返回与第一个等于 *condition-expression* 的文本标签相对应的 *return-expression*。如果没有等于 *condition-expression* 的标签，则 `switch` 返回 *default-expression*。每个 *return-expression* 和 *default-expression* 必须具有相同的数据类型。

## 语法


```
switch(condition-expression, label-1, return-expression-1 [, label-n, return-expression-n ...], 
        default-expression)
```

## Arguments


`switch` 需要一个或多个 *if*/*then* 表达式对，*else* 参数只需要一个表达式。

 *condition-expression*   
要与标签文本进行比较的表达式。它可以是字段名称（如 `address`）、文本值（如“`Unknown`”）或其他函数（如 `toString(salesAmount)`）。

 *label*   
要与 *condition-expression* 参数进行比较的文本，所有文本的数据类型都必须与 *condition-expression* 参数相同。`switch` 最多可接受 5000 个标签。

 *return-expression*   
其标签的值等于 *condition-expression* 的值时返回的表达式。它可以是字段名称（如 `address`）、文本值（如“`Unknown`”）或其他函数（如 `toString(salesAmount)`）。所有 *return-expression* 参数必须与 *default-expression* 具有相同的数据类型。

 *default-expression*   
任何标签参数的值都不等于 *condition-expression* 的值时返回的表达式。它可以是字段名称（如 `address`）、文本值（如“`Unknown`”）或其他函数（如 `toString(salesAmount)`）。*default-expression* 必须与所有 *return-expression* 参数具有相同的数据类型。

## 返回类型


`switch` 返回与 *return-expression* 中的值具有相同数据类型的值。*return-expression* 和 *default-expression* 返回的所有数据都必须是相同的数据类型或转换为相同的数据类型。

## 一般示例


以下示例返回输入区域名称的 Amazon Web Services 区域 代码。

```
switch(region_name, 
               "US East (N. Virginia)", "us-east-1", 
               "Europe (Ireland)", "eu-west-1", 
               "US West (N. California)", "us-west-1", 
               "other regions")
```

以下是给定的字段值。

```
"US East (N. Virginia)"
        "US West (N. California)"
        "Asia Pacific (Tokyo)"
```

对于这些字段值，将返回以下值。

```
"us-east-1"
        "us-west-1"
        "other regions"
```

## 使用 switch 替换 `ifelse`


以下 `ifelse` 用例等同于前面的示例，当 `ifelse` 评估一个字段的值是否等于不同的文本值时，改用 `switch` 是更好的选择。

```
ifelse(region_name = "US East (N. Virginia)", "us-east-1", 
               region_name = "Europe (Ireland)", "eu-west-1", 
               region_name = "US West (N. California)", "us-west-1", 
               "other regions")
```

## 表达式作为返回值


以下示例在 *return-expressions* 中使用表达式：

```
switch({origin_city_name}, 
               "Albany, NY", {arr_delay} + 20, 
               "Alexandria, LA", {arr_delay} - 10,
               "New York, NY", {arr_delay} * 2, 
               {arr_delay})
```

前面的示例更改了从特定城市起飞的每个航班的预期延误时间。

![\[函数示例结果的图像，以表格形式显示。\]](http://docs.amazonaws.cn/quick/latest/userguide/images/switch-function-example.png)
