什么时候应该在 Matlab 中使用地图容器?

use*_*193 5 matlab

Maps乍一看,在 MathWorks 上的示例中使用like(见下文)似乎很有用。但转念一想,它们是一个容器结构,就像 Matlab 的struct变量类型一样。我是新手,Maps并且错过了何时使用它们的优势,而不是structs- 将问题分解为一些可衡量的参数:在某些用例中,使用Mapsvsstructs更快并且使用更少的代码行?

来自 MathWorks 文档,例如:

months = {'Jan','Feb','Mar','Apr'};
rainfall = [327.2 368.2 197.6 178.4];
M = containers.Map(months,rainfall)
Run Code Online (Sandbox Code Playgroud)

与结构类似的东西

months = {'Jan','Feb','Mar','Apr'};
rainfall = [327.2 368.2 197.6 178.4];
for ind=1:numel(months)
  s.(months{ind})=rainfall(ind);
end
Run Code Online (Sandbox Code Playgroud)

Pab*_*ico 2

容器映射或多或少是一个具有自定义索引的结构。char当您更喜欢通过某个实例而不是索引来引用条目时,可以使用它们。假设您想要回忆三月份的降雨量。

%Declaration map, as you wrote

months = {'Jan','Feb','Mar','Apr'};
rainfall = [327.2 368.2 197.6 178.4];
M = containers.Map(months,rainfall);

M('Mar') % 197.6
Run Code Online (Sandbox Code Playgroud)

如您所见,您不仅保存变量,还保存引用(作为字符,而不是典型的方式......)。对于大量数据,您应该使用地图。char因此,当您特别需要其余部分的引用和结构时,我建议您使用映射。

映射是(...)一个字典,一个映射 x --> y,对 x 和 y 没有任何限制。结构体是一种数据结构,是一种以逻辑方式保存数据的方式。- @hbaderts

只是提醒一下,如果您可以使用向量而不是结构体,那么一定要这样做!

您将在此问题中找到有关地图的其他有价值的信息。

  • 您可以创建一个与此答案中的地图完全相同的“结构”。您可以将索引设置为“M.('Mar')”。MATLAB 中的“struct”也是字典。不同之处在于“struct”中的键必须是有效的变量名称,而“Map”中的键可以是任何内容,包括数字数组。在我看来,其他差异并不那么重要。您链接的问题的[这个答案](/sf/answers/2725348951/)正确讨论了差异。 (3认同)