> For the complete documentation index, see [llms.txt](https://chaoses-ib.gitbook.io/directory-opus/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/map.zh.md).

# Map

**Map** 对象是一个[关联容器](http://en.wikipedia.org/wiki/Associative_container)。它类似于数组或向量（例如 [**Vector**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/vector.zh.md)），因为它可以存储一个或多个对象，但它具有使用字典系统来定位对象而不是数字索引的优势。因此，您可以使用任意值（字符串、整数、日期等）作为键插入或查找对象。（注意，键会隐式转换为字符串，无论初始类型如何。）

您可以像访问函数一样访问地图的元素（例如 **Map("foo")** 用于通过键 *"foo"* 引用元素）。您也可以使用方括号（像数组或向量一样），但前提是键的名称以下划线开头，或者完全是数字（例如 **Map\[123]** 或 **Map\["\_foo"]**）。此外，您还可以使用 **get** 和 **set** 方法。

您可以使用 [**DOpusFactory**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/dopusfactory.zh.md)**.Map** 方法创建一个新的 **Map**。

地图中的键可以枚举，并且会自动按字母顺序排序。如果您想保留添加到地图中的项目的顺序，请改用 [**OrderedMap**](/directory-opus/guan-fang-shou-ce/readme.zh-10/readme.zh-3/readme.zh/orderedmap.zh.md) 对象。

以下两个示例都输出以下内容：

```
count: 4
bird -> tweet
cat -> meow
dog -> woof
snake -> hiss
```

### JScript 示例：

```
var map = DOpus.Create.Map();

map("cat") = "meow";
map("dog") = "woof";
map("bird") = "tweet";
map("snake") = "hiss";

DOpus.Output("count: " + map.count);

for (var e = new Enumerator(map); !e.atEnd(); e.moveNext())
{
 var key = e.item();
 var value = map(key);
 DOpus.Output(key + " -> " + value);
}
```

### VBScript 示例：

```
Dim map, key, value
Set map = DOpus.Create.Map

map("cat") = "meow"
map("dog") = "woof"
map("bird") = "tweet"
map("snake") = "hiss"

DOpus.Output "count: " & map.count

For Each key In map
 value = map(key)
 DOpus.Output(key & " -> " & value)
Next
```

| 属性名称   | 返回类型   | 描述                                         |
| ------ | ------ | ------------------------------------------ |
| count  | *int*  | 返回 **Map** 当前持有的元素数量。                      |
| empty  | *bool* | 如果 **Map** 为空，则返回 **True**，否则返回 **False**。 |
| length | *int*  | **count** 的同义词。                            |
| size   | *int*  | **count** 的同义词。                            |

| 方法名称   | **参数**                                    | 返回类型      | 描述                              |
| ------ | ----------------------------------------- | --------- | ------------------------------- |
| assign | <**Map**:from>                            | *none*    | 将另一个 **Map** 的内容复制到此 **Map** 中。 |
| clear  | *none*                                    | *none*    | 清除 **Map** 的内容。                 |
| erase  | \<variant:key>                            | *none*    | 擦除与指定键匹配的元素（如果它存在于地图中）。         |
| exists | \<variant:key>                            | *bool*    | 如果指定键存在于地图中，则返回 **True**。       |
| get    | \<variant:key>                            | *variant* | 返回指定键的值。                        |
| merge  | <**Map**:from>                            | *none*    | 将另一个 **Map** 的内容与当前 **Map** 合并。 |
| set    | <p>\<variant:key><br>\<variant:value></p> | *none*    | 设置指定键的值。                        |
