最近,在 R2022b 版本中,他们宣布引入字典。
我的印象是container.Map提供的字典已经可用。字典只是映射到containers.Map的不同名称吗?或者还有其他区别吗?我在网上找不到任何比较它们的东西。
据我所知,在阅读了这篇博文及其下面的评论和文档之后(我还没有\xe2\x80\x99t还没有机会尝试它们,所以如果我\xe2\x80 \x99m 错误):
\ndictionary
是实际的原始类型,例如double
,cell
或struct
。containers.Map
是一个\xe2\x80\x9c自定义类\xe2\x80\x9d,即使现在代码是内置的,功能也永远不可能像原始类型那样集成。因此,dictionary
速度明显更快。dictionary
使用正常的值语义。如果您进行复制,您将拥有两个独立的字典(请注意 MATLAB\xe2\x80\x99s 延迟复制机制)。containers.Map
是一个句柄类,意味着所有副本都指向相同的数据,修改一个副本就会修改所有数据。containers.Map
可以使用char
数组(旧的字符串格式)或数字作为键(用作键时string
隐式转换为)。可以使用任何类型,只要它重载即可。这意味着您可以使用自己的自定义类对象作为键。char
dictionary
keyhash
dictionary
是矢量化的,您可以一次查找多个值。通过 a,containers.Map
您可以使用该函数查找多个值values
,而不是使用普通的查找语法。dictionary
具有实际的 O(1) 查找。containers.Map
是\xe2\x80\x99t。containers.Map
可以将任何数组存储为值,dictionary
仅存储标量。标量可以是一个单元格,它可以包含任何数组,但这会导致语义尴尬,因为检索值会检索单元格,而不是其内容。* 不,它也是 O(1),至少在 R2022b 中是这样。
\n