我looknig基於的值以下數組進行排序[] [0]
double[][] myArr = new double[mySize][2];
所以爲前,myArr,該內容是:
1 5
13 1.55
12 100.6
12.1 .85
我希望它去:
1 5
12 100.6
12.1 .85
13 1.55
我正在尋找這樣做,而不必執行我自己的排序。任何幫助表示讚賞,謝謝。
我looknig基於的值以下數組進行排序[] [0]
double[][] myArr = new double[mySize][2];
所以爲前,myArr,該內容是:
1 5
13 1.55
12 100.6
12.1 .85
我希望它去:
1 5
12 100.6
12.1 .85
13 1.55
我正在尋找這樣做,而不必執行我自己的排序。任何幫助表示讚賞,謝謝。
使用重載Arrays#Sort(T[] a, Comparator c)它將比較器作爲第二個參數。
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]);
}
});
這種減法可能不會奏效;你應該使用'Double.compare(b [0],a [0])'代替。 – 2013-03-16 17:41:08
@LouisWasserman啊,真的,編輯它謝謝:) – PermGenError 2013-03-16 17:43:10
如何排序期望一維數組時,你如何傳遞二維數組作爲參數?這對我不起作用。 – user2441441 2013-12-20 15:44:06
你需要實現一個Comparator<Double[]>
像這樣:
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));
}
}
輸出:
[1.0, 1.0]
[4.0, 6.0]
[5.0, 4.0]
對於您可以使用Column Comparator的通用解決方案。使用類的代碼是:
Arrays.sort(myArr, new ColumnComparator(0));
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();
}
}
}
好運
雖然這是一個古老的線程,這裏有兩個例子在Java8解決問題。
由第一列進行排序([] [0]):
double[][] myArr = new double[mySize][2];
// ...
java.util.Arrays.sort(myArr, java.util.Comparator.comparingDouble(a -> a[0]));
由前兩列排序([] [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]));
歡迎使用Java 8:
Arrays.sort(myArr, (a, b) -> Double.compare(a[0], b[0]));
使用「比較器」。 – 2013-03-16 17:38:10