Matlab地图有多个键或嵌套

Ste*_*wDK 6 matlab containers

目前我正在试图取决于在一个月内的一些数据映射'Month','week','day'.

这意味着原则上我有三个键.我想到了解决问题的方法:

1)

containers.Map(month,containers.Map(week,containers.Map(day,value)))

这个解决方案的问题是引用它我必须使用:如何在不首先将其分配给局部变量的情况下索引函数返回的MATLAB数组?.

我发现这个解决方案相当"丑陋".

2)

另一种方法是使用Map带有多个键的方法.该容器文档显示,仅一维键是允许的.

题:

你有什么技巧可以解决这个多重关键问题吗?

更新/解决方案:

我最后使用串联字符串作为键(如建议的那样)我添加了以下代码片段以使其containers.Map成为正确的多维散列映射.看看下面(为了简化我排除了一周):

classdef example
properties
    myMap % Map for storage
end

methods

function obj = example()
        obj.myMap = containers.Map;
end

function obj2 = setVal(obj2,value,Month,DayType)
        key = strcat(num2str(Month),'-',num2str(DayType));
        obj2.myMap(key) = value;
    end

    function value = getValue(obj,Month,DayType)
        key = strcat(num2str(Month),'-',num2str(DayType));
       value = obj.myMap(key);
    end

end
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 1

您也许可以使用所有这三个密钥来构建一个密钥。我假设这可以完成Monthweek并且day可以被认为是唯一的。每次出现时只有一种独特的组合。因此,只需将这些键并将它们构建为单个字符串,然后将它们用作字典 / 的键即可containers.Map()

这是一个例子:

%// Test data
month1 = 'May';
week1 = 2;
day1 = 'Thursday';

month2 = 'June';
week2 = 3;
day2 = 'Friday';

month3 = 'July';
week3 = 4;
day3 = 'Sunday';

%// Define keys
key1 = [month1 num2str(week1) day1];
key2 = [month2 num2str(week2) day2];
key3 = [month3 num2str(week3) day3];

%// Build dictionary
M = containers.Map();
M(key1) = 'Hello!';
M(key2) = 'Testing!';
M(key3) = 'Yes!';

%// Now test accessing
disp(M(key1));
disp(M(key2));
disp(M(key3));
Run Code Online (Sandbox Code Playgroud)

上面的代码将花费三个月、三周和几天的时间,将它们转换为字符串,并将它们用作字典的键。我不知道输出类型适合您的目的,所以我只是分配了字符串。请注意,我获取了数字并用于num2str将数字转换为字符串,以确保与字符串其余部分的兼容性。我不知道数据类型week是什么(或者事实上的任何其他变量......),所以只需使用我所拥有的数据并根据自己的目的进行修改。

我创建了字典,然后为了测试它,我使用每个键访问每个值。正如预期的那样,我的输出是:

Hello!
Testing!
Yes!
Run Code Online (Sandbox Code Playgroud)