我有一个包含8列的二维数组(col0-col7)和一千行,我想在2列上升序排序:col2和col3。我想优先考虑列col2并对该列进行首次排序。如果col2中的两个值相等(非常高的机会),那么我想基于col3进行排序。这是我使用的当前代码:
public static void sortMyArray() {
Arrays.sort(myArray, new Comparator<double[]>() {
public int compare(double[] a, double[] b) {
int result = Double.compare(a[2], b[2]);
if (result == 0) {
return Double.compare(a[3], b[3]);
} else {
return result;
}
}
});
}
我使用的当前代码仅在col3上对我的数组进行排序。由于以后的计算,我想坚持使用二维数组。
希望你能帮助我。
编辑:根据用户的反馈做了一些更改(非常感谢!)。但问题仍然存在。这是我用来测试代码段的代码:
public static void loadTotalData() {
for (int i = 0; i < myArray.length; i++) {
myArray[i][0] = classOriginal.allData[i].col0data;
myArray[i][1] = classOriginal.allData[i].col1data;
myArray[i][2] = classOriginal.allData[i].col2data;
myArray[i][3] = classOriginal.allData[i].col3data;
myArray[i][4] = 0.0;
myArray[i][5] = 0.0;
myArray[i][6] = 0.0;
myArray[i][7] = 0.0;
}
System.out.println(myArray[0][3]);
System.out.println(myArray[1][3]);
System.out.println(myArray[2][3]);
System.out.println(myArray[3][3]);
System.out.println(myArray[4][3]);
System.out.println(myArray[5][3]);
System.out.println(myArray[6][3]);
System.out.println(myArray[7][3]);
System.out.println(myArray[8][3]);
System.out.println(myArray[9][3]);
System.out.println(myArray[10][3]);
classForSortingAndLoading.sortMyArray();
System.out.println(myArray[0][3]);
System.out.println(myArray[1][3]);
System.out.println(myArray[2][3]);
System.out.println(myArray[3][3]);
System.out.println(myArray[4][3]);
System.out.println(myArray[5][3]);
System.out.println(myArray[6][3]);
System.out.println(myArray[7][3]);
System.out.println(myArray[8][3]);
System.out.println(myArray[9][3]);
System.out.println(myArray[10][3]);
可能不是最有效的测试方法,但我知道数据源,因此我知道在排序之前和之后它应该回馈什么。
答案 0 :(得分:0)
您应该比较a
和b
的列,而不是a
和a
:
public static void sortMyArray() {
Arrays.sort(myArray, new Comparator<double[]>() {
public int compare(double[] a, double[] b) {
int result = Double.compare(a[2], b[2]);
if (result == 0) {
return Double.compare(a[3], b[3]);
} else {
return result;
}
}
});
}
由于a[2]
按定义(标识)等于a[2]
,result
始终为0
,因此,只有第3列才会进行比较,而第3列将始终返回{{ 1}}(条件的0
分支从未执行过)。
示例:
return results
执行此代码会产生以下输出:
public class Main {
public static void main(String[] args) {
double[][] myArray = sortMyArray();
printArray(myArray);
}
public static double[][] sortMyArray() {
double[][] myArray = new double[][] {
{1, 11, 21, 37, 41, 51, 61},
{0, 10, 20, 30, 40, 50, 60},
{2, 12, 22, 32, 42, 52, 62},
{1, 11, 21, 31, 41, 51, 61},
};
Arrays.sort(myArray, new Comparator<double[]>() {
public int compare(double[] a, double[] b) {
int result = Double.compare(a[2], b[2]);
if (result == 0) {
return Double.compare(a[3], b[3]);
} else {
return result;
}
}
});
return myArray;
}
private static void printArray(double[][] myArray) {
for(int row = 0; row < myArray.length; row++){
for( int column = 0; column < myArray[0].length; column++){
System.out.print(myArray[row][column] + " ");
}
System.out.println();
}
}
}