2014-09-17 5 views
4

Donc, je fais un programme qui doit gérer plusieurs tableaux. Est-il possible de trier tous ces tableaux pour refléter le tri d'un tableau? Ces valeurs sont à la même position d'index dans les trois tableaux et doivent rester à la même valeur d'index après le triTri de plusieurs matrices simultanément

Exemple:

J'ai trois tableaux:

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]; 

Est-il possible de trier le tableau de distance, puis refléter ce tri pour les autres tableaux. Donc, si je trier par nom et Jane devient 0, les autres valeurs aux mêmes positions dans les autres tableaux vont également passer à 0. Comment pourrais-je faire cela?

+1

Ne pourriez-vous pas utiliser un 4ème tableau pour indiquer leurs positions? – daentech

+0

Comment ferais-je cela? – axtscz

+0

Fondamentalement, vous avez besoin d'un tableau de proxy, qui contient l'indice de dans les autres tableaux. Vous trier ce tableau, en fonction de vos besoins – MadProgrammer

Répondre

9

Une meilleure approche orientée objet pourrait être d'avoir un objet contenant chacun des 3 champs et de le trier sur n'importe quel champ dont vous avez besoin.

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; 
    } 
} 
7

En supposant que chaque tableau a une cartographie d'index à l'autre, vous aurez besoin d'un tableau de proxy qui est utilisé pour maintenir cette cartographie, puis trier ce tableau en conséquence, par exemple ...

La cartographie tableau agit comme indexeur maître, même si son propre ordre peut changer, chaque entrée pointe toujours à la position associée dans les autres tableaux qu'il représente ...

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]); 
} 

Affichera ...

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 

Notez que l'ordre dans lequel les valeurs sont indiquées sont différentes, mais les données associées reste le même ...

Une solution plus simple serait d'encapsuler les données dans un seul Object qui a maintenu les propriétés. Cela simplifierait grandement le problème.

Questions connexes