【问题标题】:What are the differences between a Dictionary and containers.Map?Dictionary 和 containers.Map 之间有什么区别?
【发布时间】:2022-11-15 12:22:27
【问题描述】:

最近,在版本 R2022b 中,他们宣布引入 dictionaries

我的印象是字典已经可用了,由containers.Map 提供。字典只是映射到 containers.Map 的不同名称吗?还是有其他区别?我无法在网上找到任何比较它们的东西。

【问题讨论】:

  • 在 Matlab 聊天室中对此进行了一些讨论;查看this comment 和附近的人。看起来很像,但是dictionary是内置的,感觉更“原生”

标签: matlab dictionary


【解决方案1】:

在阅读this blog post and the comments under it 和文档(我还没有机会试验它们,所以如果我错了请随时纠正我)之后,我可以收集到的信息:

  1. dictionary 是一个实际的基本类型,例如doublecellstructcontainers.Map 是一个“自定义类”,即使现在代码是内置的,功能也永远无法像原始类型那样集成。因此,dictionary 明显更快。
  2. dictionary 使用普通值语义。如果你制作一个副本,你有两个独立的字典(注意 MATLAB 的惰性复制机制)。 containers.Map是句柄类,意思是所有的副本都指向同一个数据,修改一个副本就修改所有。
  3. containers.Map 可以使用char 数组(旧字符串格式)或数字作为键(string 用作键时隐式转换为 char)。 dictionary 可以使用任何类型,只要它重载 keyhash。这意味着您可以使用自己的自定义类对象作为键。
  4. dictionary 是矢量化的,您可以一次查找多个值。对于 containers.Map,您可以使用 values 函数查找多个值,而不是使用普通的查找语法。
  5. dictionary 具有实际的 O(1) 查找。如果我没记错的话,containers.Map 没有。*
  6. containers.Map 可以将任何数组存储为值,dictionary 仅存储标量。标量可以是一个单元格,它可以包含任何数组,但这会导致尴尬的语义,因为检索值会检索单元格,而不是其内容。

    * 不,它也是 O(1),至少在 R2022b 中是这样。

【讨论】:

  • 回复:第 1 点。当然 dictionary 集成得很好,但我认为它在任何方面都不是真正的“原始”。它返回 trueisobject。您不能通过 C(++) 以任何简单的方式与它交互。但它肯定通常更快。
猜你喜欢
  • 2012-04-27
  • 2011-12-16
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2016-03-26
  • 2015-05-08
相关资源
最近更新 更多