java Arrays.sort array 2d

COSÌ,

Sto cercando di ordinare il seguente array in base ai valori di [] [0]

double[][] myArr = new double[mySize][2]; 

quindi per ex, i contenuti di myArr sono:

 1 5 13 1.55 12 100.6 12.1 .85 

Voglio che arrivi a:

 1 5 12 100.6 12.1 .85 13 1.55 

Sto cercando di farlo senza dover implementare il mio stesso tipo. Qualsiasi aiuto è apprezzato, grazie.

Usa matrici sovraccariche # Ordina (T [] a, Comparatore c) che accetta Comparatore come secondo argomento.

 double[][] array= { {1, 5}, {13, 1.55}, {12, 100.6}, {12.1, .85} }; java.util.Arrays.sort(array, new java.util.Comparator() { public int compare(double[] a, double[] b) { return Double.compare(a[0], b[0]); } }); 

Benvenuto in Java 8:

 Arrays.sort(myArr, (a, b) -> Double.compare(a[0], b[0])); 

Devi implementare un Comparator modo:

 public static void main(String[] args) throws IOException { final Double[][] doubles = new Double[][]{{5.0, 4.0}, {1.0, 1.0}, {4.0, 6.0}}; final Comparator arrayComparator = new Comparator() { @Override public int compare(Double[] o1, Double[] o2) { return o1[0].compareTo(o2[0]); } }; Arrays.sort(doubles, arrayComparator); for (final Double[] arr : doubles) { System.out.println(Arrays.toString(arr)); } } 

Produzione:

 [1.0, 1.0] [4.0, 6.0] [5.0, 4.0] 

Anche se questo è un thread vecchio, ecco due esempi per risolvere il problema in Java8.

ordinamento per la prima colonna ([] [0]):

 double[][] myArr = new double[mySize][2]; // ... java.util.Arrays.sort(myArr, java.util.Comparator.comparingDouble(a -> a[0])); 

ordinamento per le prime due colonne ([] [0], [] [1]):

 double[][] myArr = new double[mySize][2]; // ... java.util.Arrays.sort(myArr, java.util.Comparator.comparingDouble(a -> a[0]).thenComparingDouble(a -> a[1])); 
 import java.util.*; public class Arrays2 { public static void main(String[] args) { int small, row = 0, col = 0, z; int[][] array = new int[5][5]; Random rand = new Random(); for(int i = 0; i < array.length; i++) { for(int j = 0; j < array[i].length; j++) { array[i][j] = rand.nextInt(100); System.out.print(array[i][j] + " "); } System.out.println(); } System.out.println("\n"); for(int k = 0; k < array.length; k++) { for(int p = 0; p < array[k].length; p++) { small = array[k][p]; for(int i = k; i < array.length; i++) { if(i == k) z = p + 1; else z = 0; for(;z < array[i].length; z++) { if(array[i][z] <= small) { small = array[i][z]; row = i; col = z; } } } array[row][col] = array[k][p]; array[k][p] = small; System.out.print(array[k][p] + " "); } System.out.println(); } } } 

In bocca al lupo

Java semplificato 8

IntelliJ suggerisce di semplificare la risposta principale a:

 Arrays.sort(queries, Comparator.comparingDouble(a -> a[0])); 

Per una soluzione generale è ansible utilizzare il Comparatore di colonne . Il codice per utilizzare la class sarebbe:

 Arrays.sort(myArr, new ColumnComparator(0));