MATLAB map容器类的用法(非常详细)
在 MATLAB 中,map 的本意是映射,就是将一个量映射为另一个量。例如,将一个字符串映射为一个数值,此时该字符串就是 map 的键(key),数值就是 map 的数据(value)。因此,可以将 map 容器理解为一种快速查找数据结构的键。
对一个 map 元素进行寻访的索引称为“键”。一个键可以是以下任意一种数据类型:
这些键和其对应的数据存储在 map 中。map 的每个条目都包括唯一的键和相对应的数据。map 中存储的数据可以是任意类型的,包括数值型、字符型、结构体、元胞数组或其他 map。
一个 map 是 MATLAB 类的一个对象。map 类的所有对象都具有 3 种属性,如下表所示。
用户不能直接对这些属性进行修改,但可以通过作用于 map 类的函数进行修改。
map 类的属性的查看方法为 map 名+小数点“.”+map 的属性名。例如,为了查看 mapW 对象包括的数据类型,需要使用 mapW.ValueType 命令。
当键和值是字符串时,需要对上述语法稍做变更:
【实例 1】创建一个名为 schedulemap 的 map 对象来存储下图所示的课程表。

图 1 课程表
在命令行窗口中输入以下语句,并显示相应的输出结果:
空 map 对象的创建方法如下。在命令行窗口中输入以下语句:
【实例 2】查看实例 1 中创建的 map 对象。在命令行窗口中输入以下语句,并显示相应的输出结果。
【实例 3】通过使用键名访问实例 1 中创建的 schedulemap 对象中的内容。在命令行窗口中输入以下语句,并显示相应的输出结果:
如果要对多个键进行访问,则可以使用 values() 函数。如在命令行窗口中输入以下语句:
提示,在对多个键进行访问时,不能像在其他数据类型中那样使用冒号“:”,因为这将导致错误的产生。例如,输入:
【实例 4】删除 schedulemap 对象中的“Thursday”及其对应的科目。在命令行窗口中输入以下语句,并显示相应的输出结果。
【实例 6】根据实例 5 中的 schedulemap 对象的结果,修改“Saturday”及其对应的科目“Public elective course”为“Sunday”及其对应的科目“MBA”。在命令行窗口中输入以下语句,并显示相应的输出结果。
【实例 7】修改“Monday”对应的科目为“English”。在命令行窗口中输入以下语句,并显示相应的输出结果。
对一个 map 元素进行寻访的索引称为“键”。一个键可以是以下任意一种数据类型:
- 1×N 的字符串;
- 单精度或双精度实数标量;
- 有符号或无符号标量整数。
这些键和其对应的数据存储在 map 中。map 的每个条目都包括唯一的键和相对应的数据。map 中存储的数据可以是任意类型的,包括数值型、字符型、结构体、元胞数组或其他 map。
一个 map 是 MATLAB 类的一个对象。map 类的所有对象都具有 3 种属性,如下表所示。
属性 | 说明 | 默认值 |
---|---|---|
Count | 无符号 64 位整数,表示 map 对象中存储的 key/value 对的总数 | 0 |
KeyType | 字符串,表示 map 对象中包括的 key 的类型 | char |
ValueType | 字符串,表示 map 对象中包括的数据类型 | any |
用户不能直接对这些属性进行修改,但可以通过作用于 map 类的函数进行修改。
map 类的属性的查看方法为 map 名+小数点“.”+map 的属性名。例如,为了查看 mapW 对象包括的数据类型,需要使用 mapW.ValueType 命令。
创建map对象
map 是一个 map 类中的对象,由 MATLAB 中名为“容器”的一个包来定义,可以通过构造函数来创建,创建方法如下:mapObj = containers.Map({key1, key2, ...}, {val1, val2, ...})
当键和值是字符串时,需要对上述语法稍做变更:
mapObj = containers.Map({'key1', 'key2', ...}, {val1, val2, ...})
【实例 1】创建一个名为 schedulemap 的 map 对象来存储下图所示的课程表。

图 1 课程表
在命令行窗口中输入以下语句,并显示相应的输出结果:
>> clear >> schedulemap = containers.Map({'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}, {'Maths', 'Chinese', 'History', 'Geography', 'Biology'}) schedulemap = Map - 属性: Count: 5 KeyType: char ValueType: char此外,map 对象的创建可以分为两个步骤:首先创建一个空 map 对象;然后使用 keys 和 values 函数对其内容进行补充。
空 map 对象的创建方法如下。在命令行窗口中输入以下语句:
>> newMap = containers.Map() newMap = Map - 属性: Count: 0 KeyType: char ValueType: any
查看map对象
map 对象中的每个条目都包括两部分,一个唯一的键及其对应的值。可以通过 keys() 函数查看 map 对象中包含的所有键,通过 values() 函数查看所有的值。【实例 2】查看实例 1 中创建的 map 对象。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> keys(schedulemap) ans = 1x5 cell 数组 {'Friday'} {'Monday'} {'Thursday'} {'Tuesday'} {'Wednesday'} >> values(schedulemap) ans = 1x5 cell 数组 {'Biology'} {'Maths'} {'Geography'} {'Chinese'} {'History'}
读取map对象
在创建好一个 map 对象后,用户可以对其进行数据的寻访。寻访指定键(keyName)所对应的值(valueName)使用的格式如下:valueName = mapName(keyName)当键名是一个字符串时,需要使用单引号将其引起来。
【实例 3】通过使用键名访问实例 1 中创建的 schedulemap 对象中的内容。在命令行窗口中输入以下语句,并显示相应的输出结果:
>> course = schedulemap('Wednesday') course = 'History'
如果要对多个键进行访问,则可以使用 values() 函数。如在命令行窗口中输入以下语句:
>> values(schedulemap, {'Monday', 'Thursday'}) ans = 1x2 cell 数组 {'Maths'} {'Geography'}
提示,在对多个键进行访问时,不能像在其他数据类型中那样使用冒号“:”,因为这将导致错误的产生。例如,输入:
>> schedulemap('Monday':'Thursday')弹出如下错误提示信息:
警告:Colon operands must be real scalars. This warning will become an error in a future release.
编辑map对象
1) 从map对象中删除key/value对
用户可以使用 remove() 函数从 map 对象中删除 key/value 对。该函数的调用格式如下:remove('mapName', 'keyName')在上述代码中,mapName 和 keyName 分别为 map 对象的名称及需要删除的键名。执行该命令后,MATLAB 系统会删除指定的键名及其对应的值。
【实例 4】删除 schedulemap 对象中的“Thursday”及其对应的科目。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> week = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}; >> subject = {'Maths', 'Chinese', 'History', 'Geography', 'Biology'}; >> schedulemap = containers.Map(week, subject) schedulemap = Map - 属性: Count: 5 KeyType: char ValueType: char >> newMap = containers.Map() newMap = Map - 属性: Count: 0 KeyType: char ValueType: any >> remove(schedulemap, 'Thursday') >> keys(schedulemap) ans = 1x4 cell 数组 {'Friday'} {'Monday'} {'Tuesday'} {'Wednesday'} >> values(schedulemap) ans = 1x4 cell 数组 {'Biology'} {'Maths'} {'Chinese'} {'History'}
2) 添加key/value对
当用户向一个 map 对象中写入新元素的值时,需要提供键名,而且该键的类型必须和 map 中的其他键一致。该操作的调用格式如下:existingMapObj(newKeyName) = newValue【实例 5】为 schedulemap 对象添加“Saturday”及其对应的科目“Public elective course”。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> schedulemap('Saturday') = 'Public elective course' schedulemap = Map - 属性: Count: 5 KeyType: char ValueType: char >> keys(schedulemap) ans = 1x5 cell 数组 {'Friday'} {'Monday'} {'Saturday'} {'Tuesday'} {'Wednesday'} >> values(schedulemap) ans = 1x5 cell 数组 {'Biology'} {'Maths'} {'Public elective course'} {'Chinese'} {'History'}
3) 修改key
如果需要在保持值不变的情况下对键名进行更改,则首先要删除键名及其对应的值,然后添加一个有正确键名的新条目。【实例 6】根据实例 5 中的 schedulemap 对象的结果,修改“Saturday”及其对应的科目“Public elective course”为“Sunday”及其对应的科目“MBA”。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> remove(schedulemap, 'Saturday'); >> schedulemap('Sunday') = 'MBA'; >> keys(schedulemap) ans = 1x5 cell 数组 {'Friday'} {'Monday'} {'Sunday'} {'Tuesday'} {'Wednesday'} >> values(schedulemap) ans = 1x5 cell 数组 {'Biology'} {'Maths'} {'MBA'} {'Chinese'} {'History'}
4) 修改value
通过赋值操作覆盖原有的值,即可对 map 对象中的值进行修改。【实例 7】修改“Monday”对应的科目为“English”。在命令行窗口中输入以下语句,并显示相应的输出结果。
>> schedulemap('Monday') ans = 'Maths' >> schedulemap('Monday') = 'English'; >> keys(schedulemap) ans = 1x5 cell 数组 {'Friday'} {'Monday'} {'Sunday'} {'Tuesday'} {'Wednesday'} >> values(schedulemap) ans = 1x5 cell 数组 {'Biology'} {'English'} {'MBA'} {'Chinese'} {'History'}