Чтение и запись с использованием индекса ключа

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

Примечание

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

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

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

valueN = mapObj(keyN);

Начните с Map 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'

Контейнеры map поддерживают только скалярное индексирование. Вы не можете использовать оператор двоеточия для доступа к области значений ключей, как вы можете с другими MATLAB® классы. Для примера следующие операторы выдают ошибку:

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

Добавление пар ключ/значение

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

Используйте следующий синтаксис, чтобы вставить дополнительные элементы в карту:

existingMapObj(newKeyName) = newValue;

Начните с Map 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'

Создайте карту с конкатенацией

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

Правила конкатенации объектов Map:

  • Разрешены только вертикальные векторы объектов Map. Вы не можете создать массив m-на-n или горизонтальный вектор объектов Map. По этой причине, vertcat поддерживается для объектов Map, но не для horzcat.

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

  • Можно объединить Карты с различными номерами пар ключ/значение. Результатом является один объект Map, содержащий пары ключ/значение от каждого из добавляющих объектов 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. В Map 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'

См. также

| | |

Похожие темы