Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

使用键索引读取和写入

从映射中读取时,使用您已定义并与特定值相关的相同键。向映射写入新条目时需要您向要存储的每个值提供键。

注意

对于大型映射,键加值的方法占用许多内存,因为其输出是元胞数组。

从映射中读取

构造并填充映射后,您可以开始使用它存储并检索数据。按照和数组相同的方式使用映射,不同的是不限于使用整数索引。用于查找特定键 (keyN) 的值 (valueN) 的常规语法如下所示。如果键是字符向量,请将其引在单引号中:

valueN = mapObj(keyN);

从映射 ticketMap 开始:

ticketMap = containers.Map(...
    {'2R175', 'B7398', 'A479GY', 'NZ1452'}, ...
    {'James Enright', 'Carl Haynes', 'Sarah Latham', ...
     'Bradley Reid'});

可以通过恰当的键索引映射来查找任何单个值:

passenger = ticketMap('2R175')

passenger =

James Enright

查找机票 A479GY 的持有者:

sprintf('   Would passenger %s please come to the desk?\n', ...
    ticketMap('A479GY'))

ans =

   Would passenger Sarah Latham please come to the desk?

要访问多个键的值,请使用 values 方法并指定元胞数组中的键:

values(ticketMap, {'2R175', 'B7398'})

ans = 

    'James Enright'    'Carl Haynes'

映射容器仅支持标量索引。不能像对其他 MATLAB® 类一样使用冒号运算符访问一系列键。例如,以下语句引发错误:

ticketMap('2R175':'B7398')
ticketMap(:)

添加键/值对组

和其他数组类型不同,映射中的每个条目包含两项:值及其键。向映射写入新值时,还必须提供其键。该键的类型必须与映射中的任何其他键一致。

使用以下语法在映射中插入其他元素:

existingMapObj(newKeyName) = newValue;

从映射 ticketMap 开始:

ticketMap = containers.Map(...
    {'2R175', 'B7398', 'A479GY', 'NZ1452'}, ...
    {'James Enright', 'Carl Haynes', 'Sarah Latham', ...
     'Bradley Reid'});

ticketMap 映射增加两个条目:验证 ticketMap 现在拥有六个键/值对组:

ticketMap('947F4') = 'Susan Spera';
ticketMap('417R93') = 'Patricia Hughes';

ticketMap.Count

ans =

                    6

列出 ticketMap 中的所有键和值:

keys(ticketMap),  values(ticketMap)

ans = 

    '2R175'    '417R93'    '947F4'    'A479GY'    'B7398'    'NZ1452'


ans = 

    'James Enright'    'Patricia Hughes'    'Susan Spera'    'Sarah Latham'    'Carl Haynes'    'Bradley Reid'

使用串联构建映射

可以使用串联向映射中添加键/值对组。映射对象的串联与其他类不同。MATLAB 不会构建映射对象的向量,而是返回一个映射,该映射含有来自每个相关映射对象的键/值对组。

映射对象串联的规则是:

  • 仅允许使用映射对象的垂直向量。不能创建映射对象的 m×n 数组或水平向量。出于这个原因,系统支持映射对象的 vertcat,但不支持 horzcat

  • 串联的每个映射中的所有键必须属于同一类。

  • 可以将具有不同数量的键/值对组的映射组合在一起。这将生成一个映射对象,其中包含来自每个相关映射对象的键/值对组:

    tMap1 = containers.Map({'2R175', 'B7398', 'A479GY'}, ...
        {'James Enright', 'Carl Haynes', 'Sarah Latham'});
    
    tMap2 = containers.Map({'417R93', 'NZ1452', '947F4'}, ...
        {'Patricia Hughes', 'Bradley Reid', 'Susan Spera'});
    
    % Concatenate the two maps:
    ticketMap = [tMap1; tMap2];
    

    该串联的结果是生成一个 6 元素映射,与前一部分中所构造的映射相同:

    ticketMap.Count
    
    ans =
    
                        6
    
    keys(ticketMap),  values(ticketMap)
    
    ans = 
    
        '2R175'    '417R93'    '947F4'    'A479GY'    'B7398'    'NZ1452'
    
    
    ans = 
    
        'James Enright'    'Patricia Hughes'    'Susan Spera'    'Sarah Latham'    'Carl Haynes'    'Bradley Reid'
  • 串联在生成的映射对象中不包括重复键或其值。

    在下面的示例中,对象 m1m2 都使用键 8。在映射 m1 中,8 是值 C 的键;在 m2 中,它是值 X 的键:

    m1 = containers.Map({1, 5, 8}, {'A', 'B', 'C'});
    m2 = containers.Map({8, 9, 6}, {'X', 'Y', 'Z'});
    

    组合 m1m2 以形成新的映射对象 m

    m = [m1; m2];

    生成的映射对象 m 仅有五个键/值对组。值 C 已从该串联中删除,因为其键不是唯一的:

    keys(m), values(m)
    
    ans = 
    
        [1]    [5]    [6]    [8]    [9]
    
    
    ans = 
    
        'A'    'B'    'Z'    'X'    'Y'

另请参阅

| | |

相关主题