我不确定我是否使用了正确的命名法,所以我会尽量让我的问题具体。也就是说,我想这个问题一直存在,并且可能有几种不同的方法来处理它。
假设我有一个名为main
的数组(向量),在1980年到2000年之间有1000个随机年份,我希望从中生成20个独立的数组(向量)。这些数组将命名为array1980
,array1981
等,也将具有长度1000,但将包含1s,其中名称中的索引等于main
中的对应元素,其他地方为0s 。换句话说:
for(int i=0; i<1000; i++){
if(main[i]==1980){
array1980[i]=1;
} else {
array1980[i]=0;
}
当然,我不想写二十个,所以如果我能在循环中创建新的变量名,那就更好了。问题是您通常不能将变量名称分配给具有运算符的表达式,例如,
String("array"+ j)=... # returns an error
我目前正在使用Matlab,但我也可以在Java,c ++和python中做一些事情,而我正试图了解人们如何解决这个问题。理想情况下,我希望能够以某种方式操纵单个变量(或子数组),使得年份保留在变量名称(或数组索引)中,以减少出错的可能性并使事情更容易处理一般来说。
我很感激任何帮助。
答案 0 :(得分:3)
boolean main[][] = new boolean[1000][20];
for (int i=0; i < 1000; i++) {
array[i][main[i]-1980] = true;
}
在许多情况下,地图将是一个很好的解决方案,但在这里你可以使用2-dim的布尔数组,因为大小在(0-20)之前是已知的并且是连续的,并且是可数的。
有些语言会将每个元素的布尔数组初始化为false,因此您只需要将值设置为true
,main[i]
个点。
由于main[i]
返回1980年到2000年的数字,1980-main[i]
将返回1980-1980 = 0到2000-1980 = 20。要查找您的值,您必须将1980
添加到第二个索引。
答案 1 :(得分:2)
对此的一般解决方案是不使用动态名称创建变量,而是创建地图。具体如何完成将因语言而异。
对于Java,值得一看the map section of the Sun collections tutorial。
答案 2 :(得分:1)
Don Roby的回答是正确的,但我想完成它。
您可以将地图用于此目的,它看起来像这样:
Map<Integer,ArrayList<Integer>> yearMap = new HashMap<Integer,ArrayList<Integer>>();
yearMap.put(1980,new ArrayList<Integer>());
for (int i = 0; i < 1000; i++){
yearMap.get(1980).add(0);
}
yearMap.get(1980).set(999,1);
System.out.println(yearMap.get(1980).get(999));
但是可能有更好的方法来解决你所遇到的问题。你不应该问如何使用X来解决Y,但是如何解决Y.
那么,你试图解决的是什么?