MATLAB R2022a完全自学一本通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1.8 map容器类型

1.map容器类型及map类概述

map的本意是映射,就是将一个量映射为另一个量。例如,将一个字符串映射为一个数值,此时该字符串就是map的键(key),数值就是map的数据(value)。因此,可以将map容器理解为一种快速查找数据结构的键。

对一个map元素进行寻访的索引称为“键”。一个键可以是以下任何一种数据类型。

● 1×N的字符串。

● 单精度或双精度实数标量。

● 有符号或无符号标量整数。

这些键和其对应的数据存储在map中。map的每个条目都包括唯一的键和相对应的数据。map中存储的数据可以是任何类型的,包括数值类型、字符或字符串类型、结构体类型、元胞数组类型或其他map。

一个map是MATLAB类的一个对象。map类的所有对象都具有3种属性,如表2-10所示。用户不能直接对这些属性进行修改,但可以通过作用于map类的函数进行修改。

表2-10 map类的属性

map类的属性的查看方法为map名+小数点“.”+map的属性名。例如,为了查看mapW对象包括的数据类型,需要使用mapW.ValueType命令。

2.创建map对象

map是一个map类中的对象,由MATLAB中名为“容器”的一个包来定义,可以通过构造函数来创建,创建方法如下:

当键和值是字符串时,需要对上述语法稍做变更,即:

例2-24:创建一个名为schedulemap的map对象来存储如表2-11所示的课程表。

表2-11 课程表

创建过程如下:

得到的结果如下:

此外,map对象的创建可以分为两个步骤:首先创建一个空map对象;然后使用keys()和values()方法对其内容进行补充。空map对象的创建方法如下:

得到的结果如下:

3.查看/读取map对象

(1)查看map对象。

map对象中的每个条目都包括两部分:一个唯一的键及其对应的值。可以通过keys函数查看map对象中包含的所有键,通过values函数查看所有的值。

例2-25:查看例2-24中创建的map对象。

在命令行窗口中依次输入:

得到的结果如下:

(2)读取map对象。

在创建好一个map对象后,用户可以对其进行数据的寻访。寻访指定键(keyName)所对应的值(valueName)使用的格式如下:

当键名是一个字符串时,需要使用单引号将其引起来。

例2-26:通过使用键名访问例2-24中创建的schedulemap对象中的内容。

在命令行窗口中输入:

得到的结果如下:

如果需要对多个键进行访问,则可以使用values函数。例如:

得到的结果如下:

○ 提示

在对多个键进行访问时,不能像在其他数据类型中那样使用冒号“:”,因为这将导致错误的产生。例如,输入:

弹出如下错误提示信息:

4.编辑map对象

(1)从map对象中删除key/value对。

用户可以使用remove函数从map对象中删除key/value对。该函数的调用格式为:

在上述代码中,mapName和keyName分别为map对象的名称及需要删除的键名。执行该命令后,MATLAB系统会删除指定的键名及其对应的值。

例2-27:删除schedulemap对象中的“Thursday”及其对应的科目。

在命令行窗口中依次输入:

得到的结果如下:

(2)添加key/value对。

当用户向一个map对象中写入新元素的值时,需要提供键名,而且该键的类型必须和map中的其他键一致。该操作的调用格式为:

例2-28:为schedulemap对象添加“Saturday”及其对应的科目“Public elective course”。

在命令行窗口中依次输入:

得到的结果如下:

(3)修改key。

如果需要在保持值不变的情况下对键名进行更改,则首先要删除键名及其对应的值,然后添加一个有正确键名的新条目。

例2-29:根据例2-28中的schedulemap对象的结果,修改“Saturday”及其对应的科目“Public elective course”为“Sunday”及其对应的科目“MBA”。

在命令行窗口中依次输入:

程序运行结果如下:

(4)修改value。

通过赋值操作覆盖原有的值,即可对map对象中的值进行修改。

例2-30:修改“Monday”的科目为“English”。

在命令行窗口中依次输入:

程序运行结果如下: