同时对多个阵列进行排序

时间:2014-09-17 00:33:54

标签: java arrays sorting

所以我正在制作一个需要处理多个数组的程序。有没有办法对所有这些数组进行排序以反映一个数组的排序?这些值在所有三个数组中处于相同的索引位置,并且需要在排序后保持相同的索引值

示例:

我有三个阵列:

String[] distance = [1,3,6,7,9];
String[] name = [Joel, John, Joe, Jill, Jane]
String[] values = [1.5,2.3,5.6,7.1,6.5];

有没有办法对距离数组进行排序,然后将该排序反映到其他数组。因此,如果我按名称排序并且Jane变为0,则其他数组中相同位置的其他值也将变为0.我怎么能这样做?

2 个答案:

答案 0 :(得分:9)

更好/更面向对象的方法可能是让一个对象保存3个字段中的每一个,并在任何需要的字段上对其进行排序。

public static class MyObject implements Comparable<MyObject> {

    public int distance;
    public String name;
    public float value;


    // Replace this with whichever field is needed
    @Override
    public int compareTo(MyObject o) {
        // If it's the String
        return this.name.compareTo(o.name);
        // If it's one of the values
        return this.distance - o.distance;
    }
}

答案 1 :(得分:8)

假设每个数组都有一个映射到另一个数组的索引,你将需要一个用于维护该映射的代理数组,然后相应地对该数组进行排序,例如......

映射数组充当主索引器,即使它自己的顺序可能会改变,每个条目仍然指向它所代表的其他数组中的相关位置......

String[] distance = {"1", "3", "6", "7", "9"};
String[] name = {"Joel", "John", "Joe", "Jill", "Jane"};
String[] values = {"1.5", "2.3", "5.6", "7.1", "6.5"};
// Mapping array...
Integer[] proxyLookup = new Integer[]{0, 1, 2, 3, 4};

System.out.println("Unsorted...");

for (int index : proxyLookup) {
    System.out.println(name[index] + "; " + distance[index] + "; " + values[index]);
}

Arrays.sort(proxyLookup, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return name[o1].compareTo(name[o2]);
    }
});

System.out.println("Sorted...");

for (int index : proxyLookup) {
    System.out.println(name[index] + "; " + distance[index] + "; " + values[index]);
}

这将输出......

Unsorted...
Joel; 1; 1.5
John; 3; 2.3
Joe; 6; 5.6
Jill; 7; 7.1
Jane; 9; 6.5

Sorted...
Jane; 9; 6.5
Jill; 7; 7.1
Joe; 6; 5.6
Joel; 1; 1.5
John; 3; 2.3

请注意,列出值的顺序不同,但关联的数据保持不变......

更简单的解决方案是将数据封装到维护属性的单个Object中。这将大大简化问题