Matlab地图有多个键或嵌套

时间:2014-07-29 06:42:30

标签: matlab containers

我目前正在尝试在一个月内映射一些数据,具体取决于'Month''week''day'

这意味着原则上我有三把钥匙。我想到了解决问题的方法:

1)

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

此解决方案的问题是引用它我必须使用:How can I index a MATLAB array returned by a function without first assigning it to a local variable?

我发现这个解决方案相当“难看”。

2)

另一种方法是使用带有多个键的Mapcontainers documentation表示只允许使用单个维度键。

问题:

你有解决这个多重关键问题的技巧吗?

更新/解决方案:

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

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

2 个答案:

答案 0 :(得分:1)

您也许可以使用这三个键来构建单个键。我假设这可以Month完成,weekday可以视为唯一。每次出现只有一个唯一组合。因此,只需将这些键构建为单个字符串,然后将这些键用作词典/ 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));

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

我创建了字典,然后测试它,我用每个键访问每个值。正如所料,我的输出是:

Hello!
Testing!
Yes!

答案 1 :(得分:0)

Matlabs文件交换上有一个新的MapNested类: http://de.mathworks.com/matlabcentral/fileexchange/62492-mapnested-implementation-for-nested-maps--map-of-maps-

或在github上:

https://github.com/RolandRitt/Matlab-NestedMap

看看吧!

设置值的语法如下:

NMapobj = MapNested(); %constructor;
NMapobj(key1, key2, key3) = value;

用于检索:

value = NMapobj(key1, key2, key3);