Чтение и запись Используя ключевой индекс

При чтении из Карты используйте те же ключи, которые вы задали и сопоставили с особыми значениями. Запись новых записей в Карту требует, чтобы вы предоставили значения, чтобы сохранить ключом для каждого.

Примечание

Для большой Карты ключи и методы значения используют большую память, когда их выходные параметры являются массивами ячеек.

Чтение из карты

После того, как вы создали и заполнили свою Карту, можно начать использовать ее, чтобы сохранить и получить данные. Вы используете Карту таким же образом, что вы были бы массив, за исключением того, что вы не ограничиваетесь использованием целочисленных индексов. Общий синтаксис для поиска значения (valueN) для данного ключа (keyN) показан здесь. Если ключ является вектором символов, заключите его в одинарные кавычки:

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.

  • Все ключи в каждой конкатенируемой Карте должны иметь тот же класс.

  • Можно объединить Карты с различными количествами пар ключ/значение. Результатом является один объект Map, содержащий пары ключ/значение от каждого из способствующих объектов Карты:

    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'
  • Конкатенация не включает дублированные ключи или их значения в получившемся объекте Map.

    В следующем примере, оба объекта m1 и m2 используйте ключ 8. В карте m1, 8 ключ должен оценить C; в m2, это - ключ, чтобы оценить X:

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

    Объедините m1 и m2 сформировать новый объект Map, m:

    m = [m1; m2];

    Получившийся объект Map m имеет только пять пар ключ/значение. Значение C было исключено из конкатенации, потому что ее ключ не был уникален:

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

Смотрите также

| | |

Похожие темы