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