79 votes

Obtenir les indices d'un tableau après un tri ?

Supposons que l'utilisateur entre un tableau, par exemple :

Array = {France, Spain, France, France, Italy, Spain, Spain, Italy}

dont je connaissais la longueur

le site index le tableau serait :

index = {0, 1, 2, 3, 4, 5, 6, 7}

Maintenant, après l'avoir trié en utilisant Arrays.sort(Array);

newArray sera comme :

newArray = {France, France, France, Italy, Italy, Spain, Spain, Spain}

et le newIndex le sera :

newIndex = {0, 2, 3, 4, 7, 1, 5, 6}

Le problème est le suivant : comment puis-je trouver le newIndex à partir du tableau d'entrée ?

Merci d'avance

0 votes

Similaire à stackoverflow.com/questions/4839915/ mais beaucoup plus clairement défini.

2voto

Shamim Hafiz Points 8419

Une façon de procéder est d'envelopper l'index original et le nom du pays dans une classe distincte. Puis de trier le tableau en fonction des noms. De cette façon, vos index originaux seront préservés.

0 votes

Pouvez-vous donner un exemple ?

1voto

Ce qui vient au premier coup d'oeil est Map them like that

Map <Integer, String> map = new HashMap<Integer, String>();
map.put(0, "France");
map.put(1, "Spain");
map.put(2, "France");

et ensuite les trier par valeur comme ça et ensuite vous pouvez connaître leurs index et valeurs (key, values) en imprimant simplement la carte

Iterator mapIterator = map.keySet().iterator();  

while (mapIterator .hasNext()) {  
     String key = mapIterator.next().toString();  
     String value = map.get(key).toString();  

     System.out.println(key + " " + value);  
}

0voto

minjun Points 11

J'ai trouvé la solution.

List<String> a = {b, a, d, c};
List<Integer> b = {2, 1, 4, 3};

et si a trier

private void setsortb() {
List<String> beforeA = new ArrayList<>();
List<Integer> beforeB = new ArrayList<>();
beforeA.addAll(a);
beforeB.addAll(b);
a.sort();//change like this {a, b, c, d}

for(int i = 0; i < beforeA.size(); i++) {
int index = beforeA.indexOf(a.get(i));
b.set(i, beforeB.get(i));
}
}

comme ceci

résultat

a = {a, b, c, d}
b = {1, 2, 3, 4}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X