嵌套循环将多维数组转换为Hashmap

时间:2016-05-23 07:08:56

标签: java loops

我想转换以下多维数组

[[ChestPain, (Chest), Heartburn], [Day2NumberofRefluxes, 2, 1, 5], [SIDay2, 15.4, 3.8, 71.4], [SAPDay2, 70.2, 0.0, 99.9]]

进入HashMap如下

mapReflDayOneandTwo{Day2NumberofRefluxesChestPain=2, Day2NumberofRefluxes(Chest)=1, Day2NumberofRefluxesHeartburn=5, SIDay2ChestPain=15.4, SIDay2(Chest)=3.8, SIDay2Heartburn=71.4, SAPDay2ChestPain=70.2, SAPDay2(Chest)=0.0, SAPDay2Heartburn=99.9}

我尝试使用以下代码执行此操作:

for (int ff=1;ff<Symptoms.size();ff++){
         for (int fx=0;fx<Symptoms.get(0).size();fx++){
             for (int fxr=1;fxr<Symptoms.get(fx).size();fxr++){
             mapReflDayOneandTwo.put(Symptoms.get(ff).get(0)+Symptoms.get(0).get(fx),Symptoms.get(ff).get(fxr));
                                                              } 
                                                       }
                                       }

然而,当我这样做时,值似乎不正确,我得到以下结果与错误键相关联的值。我在循环中做错了什么? (并将ff移至0开始或fxr开始为0也不起作用)

mapReflDayOneandTwo{Day2NumberofRefluxesChestPain=1, Day2NumberofRefluxes(Chest)=5, Day2NumberofRefluxesHeartburn=5, SIDay2ChestPain=3.8, SIDay2(Chest)=71.4, SIDay2Heartburn=71.4, SAPDay2ChestPain=0.0, SAPDay2(Chest)=99.9, SAPDay2Heartburn=99.9}

1 个答案:

答案 0 :(得分:1)

问题是,你有3个循环,所以你将把所有东西与所有东西结合起来(但你只会看到最终的结果,因为在地图中,旧的组合被覆盖)。你所做的是,例如,将(Chest)Day2NumberofRefluxes合并3次,但只有一个结果会保留在地图中,错误的一个:

  1. for个变量的值将为1, 1, 1,因此您可以在地图中放置值Day2NumberofRefluxes(Chest)=2
  2. for个变量的值将为1, 1, 2,因此您可以在地图中放置值Day2NumberofRefluxes(Chest)=1
  3. for个变量的值将为1, 1, 3,因此您可以在地图中放置值Day2NumberofRefluxes(Chest)=5
  4. 所以你在地图中留下了Day2NumberofRefluxes(Chest)=5

    您只需要2个for循环,首先要浏览第一个列表,然后第二个循环遍历矩阵中的其他列表,因此当您将(Chest)Day2NumberofRefluxes合并时,那一刻,你知道他们的组合值(i,j + 1)的坐标,并将该值放在地图中:

       for (int i = 0; i < Symptoms.get(0).size(); i++) {
            for (int j = 1; j < Symptoms.size(); j ++) {
                mapReflDayOneandTwo.put(Symptoms.get(j).get(0) + Symptoms.get(0).get(i), 
                     Symptoms.get(j).get(i + 1));
            }
       }
    

    现在你得到:

    {Day2NumberofRefluxes(Chest)=1, Day2NumberofRefluxesChestPain=2, Day2NumberofRefluxesHearthburn=5, SAPDay2(Chest)=0.0, SAPDay2ChestPain=70.2, SAPDay2Hearthburn=99.9, SIDay2(Chest)=3.8, SIDay2ChestPain=15.4, SIDay2Hearthburn=71.4}