Andrew Janke находится на месте. Используйте containers.Map
. containers.Map
- это то, что известно как associative array. Он также известен как таблица символов, карта или словарь. Основой ассоциативного массива является то, что вы обращаетесь к массиву с помощью ключа, и вы получаете ассоциированное значение, сопровождаемое этим ключом.
Лучшим примером может служить английский словарь, в котором ключ - это слово, которое вы хотите найти, а значение - это определение этого конкретного слова. Например (без прикрас), полагая, что наш словарь был f
, и я использовал ключ rayryeng
, возможное значение может быть:
f('rayryeng') --> he is awesome
Сейчас в MATLAB, список возможных основных типов: 'char', 'double', 'single', 'int32', 'uint32', 'int64', or 'uint64'
. Список возможных значений: 'char', 'logical', 'double', 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', or 'uint64'
. Учитывая ваше приложение, похоже, что вы хотите, чтобы ключ был double
, а значение было char
.
Таким образом, инициализировать containers.Map
распознать эту комбинацию ключ/значение:
f = containers.Map('KeyType','double','ValueType','char')
Мы получаем это:
f =
Map with properties:
Count: 0
KeyType: double
ValueType: char
Там в настоящее время нет пар ключ/значение в этом словаре, и ожидаемый ключ - double
, а выходное значение - char
.Мы можем начать добавлять вещи по желанию:
>> f(5.12) = 'hello';
>> f(-1.56) = 'Solarmew';
>> f(pi) = 'YES!';
Я добавил в 3-х ключей 5.12 -1.56 и pi
с разными строками. Теперь, если вы хотите, чтобы извлечь значение, заданное ключом, просто дать правильный ключ:
>> x = f(-1.56)
x =
Solarmew
Если попытаться дать ключ, который не существует, MATLAB даст вам ошибку:
>> y = f(0)
Error using containers.Map/subsref
The specified key is not present in this container.
Если вы хотите, чтобы проверить, если ключ существует в словаре, используйте метод isKey
:
>> isKey(f, 0)
ans =
0
Некоторые другие методы для вас. Вы можете получить все ключи в словаре в настоящее время с помощью метода keys
:
>> k = keys(f)
k =
[-1.5600] [3.1416] [5.1200]
k
массива ячеек, где каждый элемент является ключевым в этом словаре. Точно так же, если вы хотите, чтобы значения, используйте метод values
:
>> v = values(f);
v =
'Solarmew' 'YES!' 'hello'
Следует отметить, что оба keys
и values
не гарантирует порядок. Это означает, что порядок, в котором вы добавили ключи и значения, не обязательно означает, что вы получите такой же порядок, когда вы вызываете keys
или values
. И, наконец, если вы хотите удалить пару ключ/значение из словаря, используйте remove
метод:
>> remove(f, -1.56);
>> k = keys(f)
k =
[3.1416] [5.1200]
>> v = values(f)
v =
'YES!' 'hello'
Как вы можете видеть, ключ -1.56
, связанный с Solarmew
теперь удаляется из словаря.
Надеюсь, это поможет!
Вы пробовали 'container.Map', возможно, в переменной' persistent'? –
Я на самом деле пытался выяснить, как «стойкие» работают в течение последних нескольких дней с какой-то другой частью кода и каждый раз используют разные методы (глобальные) ... эта функция все еще очень загадочный для меня ... не могли бы вы быть более конкретными, пожалуйста? Я не совсем уверен, как это работает, пусть вместе, как применить его здесь. Я буду искать в контейнерах. Теперь сделайте это, я никогда не использовал его. – Raksha
Используйте 'persistent' вместо' global'; ваш код будет работать лучше в долгосрочной перспективе. Этот документ посвящен [doco for persistent] (http://www.mathworks.com/help/matlab/ref/persistent.html). 'persistent' означает, что переменная сохраняет свое значение в нескольких вызовах функции. Очистка функции (которая происходит неявно при изменении и сохранении функции) сбрасывает значения постоянных переменных; возможно, именно здесь возникает путаница. –