J'ai besoin de trier les INDEXES d'un tableau qui contient des valeurs doubles. Le tri doit être fait dans l'ordre croissant. Je le fais de la manière suivante (voir ci-dessous). Cela fonctionne correctement si un tableau contient des valeurs entières, mais il arrête de travailler avec des valeurs doubles. Pourquoi? Veuillez noter que je trie les index, pas les valeurs d'un tableau. Le résultat devrait être [1,0]
, ce qui fait référence à [893.05,1129.25]
.Comment trier un tableau par index d'entrée?
double[] times = new double[2];
times[0] = 1129.25;
times[1] = 893.05;
ArrayIndexComparator comparator = new ArrayIndexComparator(times,0);
Integer[] sortedTimes = comparator.createIndexArray();
Arrays.sort(sortedTimes, comparator);
public class ArrayIndexComparator implements Comparator<Integer>
{
private double[] array;
private int sort;
public ArrayIndexComparator(double[] array, int sort)
{
this.array = array;
this.sort = sort;
}
public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i;
}
return indexes;
}
@Override
public int compare(Integer index1, Integer index2)
{
if (sort == 0)
return Double.compare(array[index2],array[index1]); // descending order ...2,1,0
else
return Double.compare(array[index1],array[index2]); // ascending order 0,1,2,...
}
}
Je l'ai fait. Le contenu de sortedTimes est absolument le même: [0,1], ce qui fait référence à [1129.25,893.05]. Je ne sais pas pourquoi cela arrive. –
@KlausosKlausos Je ne comprends pas, la commande est différente pour asc et desc donc où est le problème? – Thomas
Si j'exécute ArrayIndexComparator comparator = new ArrayIndexComparator (times, 1) ;, alors le résultat est le même pour ArrayIndexComparator comparateur = new ArrayIndexComparator (times, 0); –