目前我正在试图取决于在一个月内的一些数据映射'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)
您也许可以使用所有这三个密钥来构建一个密钥。我假设这可以完成Month
,week
并且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)
归档时间: |
|
查看次数: |
4643 次 |
最近记录: |