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