我有一个名为“Worker”的对象矩阵,每个“Worker”中都有一个名为“fullname”的 String 类型变量(名称不带空格,例如:SarahSmith)。 我需要按名称按字母顺序降序对矩阵的每一列进行排序。 现在我使用此方法按字母顺序对每列进行排序:
public static void secondChange(Worker[][] mat) {
for (int m = 0; m < mat[0].length; m++) {
for (int i = 0; i < mat[0].length; i++) {
int minindex = i;
for (int j = i + 1; j < mat[0].length; j++) {
if (mat[j][m].getName().compareTo(mat[minindex][m].getName()) < 0)
minindex = j;
}
Worker temp = mat[i][m];
mat[i][m] = mat[minindex][m];
mat[minindex][m] = temp;
}
}
}
然后我使用此方法对每列进行降序排序:
public static void rightOrder(Worker[][] mat){
for (int m=0 ; m<mat[0].length ; m++)
for (int i=0, j=(mat[0].length-1) ; i<(mat[0].length/2) || j>(mat[0].length/2) ; i++,j--){
Worker temp = mat[i][m];
mat[i][m] = mat[j][m];
mat[j][m] = temp;
}
}
在第二种方法之后,矩阵将恢复到原来的形式,而不是按照我预期的方式工作(第一种方法工作正常)。 有人可以帮忙吗? :)
最佳答案
这并不能直接回答您的问题,但您可以通过为每列创建 List
包装器来使用 Java 标准且更高效的矩阵排序:
public static void sortColumnsDescending(Worker[][] matrix) {
for (int i = 0; i < matrix[0].length; i++) {
final int column = i;
new AbstractList<Worker>() {
@Override
public int size() {
return matrix.length;
}
@Override
public Worker get(int row) {
return matrix[row][column];
}
@Override
public Worker set(int row, Worker element) {
Worker prev = matrix[row][column];
matrix[row][column] = element;
return prev;
}
}.sort(Comparator.comparing(Worker::getName).reversed());
}
}
关于Java:字符串对象矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39221511/