目前我正在试图取决于在一个月内的一些数据映射'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) 我一直在思考这个问题.我需要一个可以接收一些double[][]数组的类,然后存储这个数组以备将来使用.我能想到的是存储唯一的存储选项double[][]在ArrayList<>()的double[][]的.
我确实按如下方式实现:
public class AddToArray {
public String[] parameterNames;
public ArrayList<double[][]> parametersToChange;
public AddToArray(String[] parameterNames){
this.parameterNames = parameterNames;
}
public void addToArray(double[][] parametersToChange) throws InsufficientInputException
for(int i = 0; i < parametersToChange.length; i++){
if(parametersToChange[i].length != this.parameterNames.length)
throw new InsufficientInputException("DATA DIMENSION MISMATCH");
}
// This below gives nullpointexception.
this.parametersToChange.add(parametersToChange);
}
Run Code Online (Sandbox Code Playgroud)
我打电话给这个例子:
double[][] parametersToChange = {{0.005,0.006},{0.007,0.008}};
String[] par = {"SI1","SI2"};
AddToArray abc = new AddToArray(par);
abc.addToArray(parametersToChange);
System.out.println(abc.parametersToChange.get(0)[0][0]); // this would (in my ideal world) …Run Code Online (Sandbox Code Playgroud) 简介
我在弄清楚是什么导致我在HashMap中获得NullPointerException时遇到了一些困难,这应该是相当简单的.要理解为什么我使用HashMap,我认为描述它的最好方法是说我有一个多线程程序,它有一些我想要存储的结果.在那个上下文中,我创建了一个名为的类SaveMethod,用于存储进程中的值.因为我永远不知道哪个线程将首先完成,所以我使用a HashMap来i在这个hashmap中存储线程的值,如下所示:
代码:
首先是HashMap的定义:
// The first Integer element is the thread index, the second is the Double value
private static HashMap<Integer,Double> AUC = new HashMap<Integer,Double>();
Run Code Online (Sandbox Code Playgroud)
然后我调用这个方法,一个线程终止存储:
public static void setAUC(double AUC,int i){
Double AUCtemp = AUC;
SaveMethod.AUC.put(i,AUCtemp);
}
Run Code Online (Sandbox Code Playgroud)
更多描述:
现在,我已经通过以下方式成功实现了上述功能:
private static HashMap<Integer,Double[]> AUC = new HashMap<Integer,Double[]>();
Run Code Online (Sandbox Code Playgroud)
也就是说,与前面的例子相比,Double[]而不是Double.这非常有效.
问题
我的问题有两个:1)Exception in thread "main" java.lang.NullPointerException当我尝试调用此代码时,为什么会收到:
public static Double getAUC(int i){
double AUC = SaveMethod.AUC.get(i);
return AUC;
}
Run Code Online (Sandbox Code Playgroud)
2)这个保存选项线程安全吗? …
所以,我创建了一个MATLAB脚本,需要几分钟才能执行.我决定在这里添加一个与文档相对应的等待栏:http://www.mathworks.se/help/matlab/ref/waitbar.html
我把它定义如下:
function crazyfunction4you();
h = waitbar(0,'Setting up...')
for i =1:N
waitbar(i/N,'Loading...')
%Some calculations is going on here
end
close(h);
end
Run Code Online (Sandbox Code Playgroud)
不知何故,这是打开一个数字的数字最终崩溃我的机器.我发现这种奇怪,因为我希望只出现一个数字:

我有兴趣听到你们有类似经历的天气吗?