1

我有一个 LinkedHashMap,我正在对其进行双重迭代,如下面的代码所述:

LinkedHashMap<Integer,Integer> nmResultMap = getResultMap();
float[][] results = new float[nmResultMap.size()][nmResultMap.size()];

    for (Entry<Integer,Integer> e :nmResultMap.entrySet()){
        for (Entry<Integer,Integer> t :nmResultMap.entrySet()){

            results[e.getValue()][t.getValue()] = doSomthng(e.getKey(),t.getKey());
        }
    }

这很好用,但由于结果是对称doSomthng(e.getKey(),t.getKey())==doSomthng(t.getKey(),e.getKey())的(数组:

for (int i  =0;i<array.length();i++){ 
    for (int j=i+1;j<array.length();j++){
        doSomthng(array[i][j]);
    }
}

感谢您的帮助

4

2 回答 2

0

将 entrySet 转换为数组,循环遍历这个数组:

Entry<Integer,Integer> entries = 
    nmResultMap.entrySet().toArray(new Entry<Integer,Integer>[0]);
于 2013-01-25T13:40:34.180 回答
0

通过我正在使用的 JB Nizet 答案激励:

for (Entry<Integer,Integer> entry:h.getResultMap().entrySet()){
        nmResultList.add(entry);
    }
    float[][] results = new float[nmResultList.size()][nmResultList.size()];
    for (int i=0;i<nmResultList.size();i++){
        for (int j =i+1; j<nmResultList.size();j++){

            results[nmResultList.get(i).getValue()][nmResultList.get(j).getValue()] = doSomthng(h.data[nmMap.get(nmResultList.get(i).getKey())], h.data[nmMap.get(nmResultList.get(j).getKey())]);
        }
    }

这正是我想要的,非常感谢您的帮助。

于 2013-01-26T13:39:59.670 回答