Reputation: 23460
What is an easy way in Java to sort the array of elements maintaining information about indexes where the elements were stored in the original array? Is there a built-in function?
There are few ways I can think of, but none of them is trivial.
The reason I need it, is to rearrange the rows in the matrix, when the order of rearrangement is specified by values in the vector. Values in the vector should be in increasing order, and rows in the matrix should be rearranged accordingly.
Upvotes: 1
Views: 603
Reputation: 1588
IMHO you would be better off creating your own design, maybe create a class called MyDataSorter with a method sort (yourArray) which returns a sorted List of your custom class which could also take generics... something like
List<OriginalOrderKeeper<MyDataType>> sort (MyDataType [] array)
Upvotes: 1
Reputation: 2855
Assume you could reorder the rows in the matrix directly, you would not need an index.
You can try sorting them using Arrays.sort(Object[] a, Comparator c)
using a special comparator:
public class RowComparator implements Comparator<double[]> {
public final int columnIndex;
@Override
public int compare(double[] row1, double[] row2) {
return Double.compare(row1[columnIndex], row2[columnIndex]);
}
public RowComparator(int columnIndex) {
super();
this.columnIndex = columnIndex;
}
}
You initialize the comparator with the column index relevant for the comparison.
EDIT: Rows and columns got mixed up a bit. I assume a double[rows][columns] array.
Upvotes: 0
Reputation: 2635
Why not iterating once over the original array before sorting and storing the indexes in a Map<Object, Integer>
?
Upvotes: 1