基于Map<Integer,List<Double>> dist
,我应该创建int[][] indexes
,它将按升序存储已排序的索引,例如:
dist =
0, [2.5, 3.5, 8.4]
1, [1.0, 5.0, 6.2]
int[][] indexes =
1,0 // refers to 1.0 in dist, because it's a smallest value
0,0, // refers to 2.5 in dist
0,1,
1,1,
1,2
0,2 // refers to 8.4 in dist
知道怎么做吗?感谢。
答案 0 :(得分:3)
您可以创建TreeMap<Double,List<IndexClass>>
。
class IndexClass {
public int row;
public int column;
}
排序功能如下:
public List<IndexClass> sort(Map<Integer,List<Double>> dist) {
//Use TreeMap because it will auto sort keys
TreeMap<Double,List<IndexClass>> treeMap = new TreeMap<Double,List<IndexClass>>();
for (Map.Entry<Integer, List<Double>> entry : dist.entrySet()) {
List<Double> distValues = entry.getValue();
for (int i = 0; i < distValues.size(); i++) {
Double value = distValues.get(i);
IndexClass index = new IndexClass();
index.row = entry.getKey();
index.column = i;
//There is a duplicate value, simple add the index into the list
if (treeMap.contains(value) {
treeMap.get(value).add(index);
//It is a new value, so create a list instead
} else {
List<IndexClass> indexList = new ArrayList<IndexClass>();
indexList.add(index);
treeMap.put(value, indexList.add);
}
}
}
List<IndexClass> finalList = new ArrayList<IndexClass>();
//Add all list items together
for (Map.Entry<Double,List<IndexClass>> entry : treeMap.entrySet()) {
finalList.addAll(entry.getValue());
}
return finalList;
}
然后你循环通过dist并将它们放入treeMap。
然后你可以打印出treeMap的值。
答案 1 :(得分:1)
是否有可能。
创建RankedEntry列表。
public class RankedEntry实现Comparable { 双重价值; int rowIdx; int colIdx;
public RankedEntry(Double value, int rowIdx, int colIdx) {
this.value = value;
this.rowIdx = rowIdx;
this.colIdx = colIdx;
}
@Override
public int compareTo(Object o) {
return this.value.compareTo((Double)o);
}
}
您在java中没有排序列表,但可以使用Collections
排序
方法
然后你可以遍历它给你的这个列表 结构
获取rowIdx和colIdx并将它们放入int[][] indexes