Andrew Janke 是正确的。使用containers.Map。 containers.Map 就是所谓的associative array。它也被称为符号表、地图或字典。关联数组背后的主干是您通过 key 访问数组,并获得与此键相关的关联值。
最好的例子是英语词典,其中键是您要查找的单词,值是该特定单词的定义。例如(没有任何修饰),假设我们的字典是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!';
我添加了 5.12、-1.56 和 pi 的 3 个键,它们具有不同的字符串。现在,如果您想检索给定键的值,只需给出正确的键:
>> 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'
如您所见,与Solarmew 关联的-1.56 的键现在已从字典中删除。
希望这会有所帮助!