Ik ben op zoek naar de volgende array op basis van de waarden van [] [0]
double[][] myArr = new double[mySize][2];
Dus bijvoorbeeld, myarr-inhoud is:
1 5
13 1.55
12 100.6
12.1 .85
Ik wil het om naar:
1 5
12 100.6
12.1 .85
13 1.55
Ik ben op zoek om dit te doen zonder mijn eigen soort te hoeven implementeren.
Antwoord 1, Autoriteit 100%
Gebruik overbelaste arrays # sorteren (t [] A, comparator C) die comparator als het tweede argument neemt.
double[][] array= {
{1, 5},
{13, 1.55},
{12, 100.6},
{12.1, .85} };
java.util.Arrays.sort(array, new java.util.Comparator<double[]>() {
public int compare(double[] a, double[] b) {
return Double.compare(a[0], b[0]);
}
});
Java-8: In plaats van die grote comparator, kunnen we Lambda-functie gebruiken als volgt –
Arrays.sort(array, Comparator.comparingDouble(o -> o[0]));
Antwoord 2, Autoriteit 66%
WELKOM JAVA 8:
Arrays.sort(myArr, (a, b) -> Double.compare(a[0], b[0]));
Antwoord 3, Autoriteit 24%
De eenvoudigste manier:
Arrays.sort(myArr, (a, b) -> a[0] - b[0]);
Antwoord 4, autoriteit 7%
Je moet een Comparator<Double[]>
implementeren zoals:
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<Double[]> arrayComparator = new Comparator<Double[]>() {
@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));
}
}
Uitvoer:
[1.0, 1.0]
[4.0, 6.0]
[5.0, 4.0]
Antwoord 5, autoriteit 6%
Hoewel dit een oude thread is, zijn hier twee voorbeelden om het probleem in Java8 op te lossen.
sorteren op de eerste kolom ([][0]):
double[][] myArr = new double[mySize][2];
// ...
java.util.Arrays.sort(myArr, java.util.Comparator.comparingDouble(a -> a[0]));
sorteren op de eerste twee kolommen ([][0], [][1]):
double[][] myArr = new double[mySize][2];
// ...
java.util.Arrays.sort(myArr, java.util.Comparator.<double[]>comparingDouble(a -> a[0]).thenComparingDouble(a -> a[1]));
Antwoord 6, autoriteit 5%
Aflopende/toenemende volgorde voor een geheeltallige array van 2 dimensies die u kunt gebruiken:
Arrays.sort(contests, (a, b) -> Integer.compare(b[0],a[0])); //decreasing order
Arrays.sort(contests, (a, b) -> Integer.compare(a[0],b[0]); //increasing order
Antwoord 7, autoriteit 3%
Vereenvoudigde Java 8
IntelliJ stelt voor om het eerste antwoord te vereenvoudigen tot de:
Arrays.sort(queries, Comparator.comparingDouble(a -> a[0]));
Antwoord 8, autoriteit 3%
Om in aflopende volgorde te sorteren, kunt u de twee parameters omdraaien
int[][] array= {
{1, 5},
{13, 1},
{12, 100},
{12, 85}
};
Arrays.sort(array, (b, a) -> Integer.compare(a[0], b[0]));
Uitvoer:
13, 5
12, 100
12, 85
1, 5
Antwoord 9
veel eenvoudigere code:
java.util.Arrays importeren;
int[][] array = nieuw int[][];
Arrays.sort(array, ( a, b) -> a[1] – b[1]);
Antwoord 10
Het is heel eenvoudig, er zijn slechts enkele syntaxis waarmee u rekening moet houden.
Arrays.sort(wedstrijden, (a, b) -> Integer.compare(a[0],b[0]));//volgorde verhogen —1
Arrays.sort(wedstrijden, (b, a) -> Integer.compare(b[0],a[0]));//volgorde verhogen —2
Arrays.sort(wedstrijden, (a, b) -> Integer.compare(b[0],a[0]));//afnemende volgorde —3
Arrays.sort(wedstrijden, (b, a) -> Integer.compare(a[0],b[0]));//afnemende volgorde —4
Als u zorgvuldig opmerkt, is het de wijziging in de volgorde van ‘A’ en ‘B’ die het resultaat beïnvloedt. Voor regel 1 is de set van (a, b) en integer.compare (A [0], B [0]), dus het is een toenemende volgorde. Nu, als we de volgorde van A en B in een van hen wijzigen, stel dan de set van (a, b) en integer.compare (B [0], A [0]) zoals in lijn 3, we krijgen afnemende volgorde.
Antwoord 11
Voor een algemene oplossing kunt u de kolomcomparator gebruiken. De code om de klasse te gebruiken zou zijn:
Arrays.sort(myArr, new ColumnComparator(0));
Antwoord 12
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();
}
}
}
Veel succes
Antwoord 13
Java 8 is tegenwoordig heel gewoon.
Arrays.sort(myArr,(double[] a,double[] b)->{
//here multiple lines of code can be placed
return a[0]-b[0];
});