exponenta event banner

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

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

Примечание

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

Считывание с карты

После создания и заполнения карты ее можно использовать для хранения и извлечения данных. Карта используется таким же образом, как массив, за исключением того, что использование целочисленных индексов не ограничено. Общий синтаксис для поиска значения (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'

Построение карты с конкатенацией

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

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

  • Допускаются только вертикальные векторы объектов Map. Невозможно создать массив m-by-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. В карте 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'

См. также

| | |

Связанные темы