【发布时间】:2013-04-03 15:45:05
【问题描述】:
我需要根据两个参数对元素进行排序,rank 和 dist(嵌入式排序)。首先,元素必须按照rank 值的降序排列。其次,这些有序的元素必须按照dist的值降序重新排序。
例子:
rank = [8.0, 2.0, 8.0, 5.0, 2.0]
dist = [1.2, 2.2, 3.1, 1.1, 0.8]
Step 1: ordered rank = [8.0, 8.0, 5.0, 2.0, 2.0], indexes = [0, 2, 3, 4, 1]
Step 2: ordered dist = [3.1, 1.2, 1.1, 2.2, 0.8], indexes = [2, 0, 3, 1, 4]
所以,最终结果是indexes = [2, 0, 3, 1, 4]。这个想法是,在第 2 步中,我们只能交换那些具有相同等级的元素。
我当前的代码版本如下:
public static void main(String[] args) {
ArrayList<Double> rank = new ArrayList<Double>();
rank.add(8.0);
rank.add(2.0);
rank.add(5.0);
rank.add(1.0);
rank.add(2.0);
rank.add(8.0);
ArrayList<Double> dist = new ArrayList<Double>();
dist.add(1.8);
dist.add(2.8);
dist.add(1.1);
dist.add(2.1);
dist.add(2.2);
dist.add(1.5);
ArrayList<ArrayList<Double>> result = new ArrayList<ArrayList<Double>>();
result.add(0,rank);
result.add(1,dist);
System.out.println(result.get(0));
ArrayList<Double> nstore1 = new ArrayList<Double>(result.get(0));
Collections.sort(result.get(0));
int[] indexes1 = new int[result.get(0).size()];
for (int n = 0; n < result.get(0).size(); n++){
indexes1[n] = nstore1.indexOf(result.get(0).get(result.get(0).size()-n-1));
}
System.out.println(Arrays.toString(indexes1));
}
我被第 2 步卡住了。如何在考虑等级顺序的同时对元素进行重新排序以服从dist?任何直观的例子都将受到高度赞赏。
【问题讨论】:
-
我觉得自己写比较器会更好。
-
@Achintya Jha:如何做到这一点,以便在第 2 步中我们只能交换那些具有相同等级的元素?
标签: java sorting collections arraylist