Отображение индексов из отсортированного в исходный массив - PullRequest
1 голос
/ 08 февраля 2012

Какой простой способ в Java сортировать массив элементов, сохраняя информацию об индексах, где элементы хранились в исходном массиве?Есть ли встроенная функция?

Есть несколько способов, о которых я могу думать, но ни один из них не тривиален.

  1. Реализуйте функцию сортировки самостоятельно и верните массив индексов висходный массив вместе с отсортированным массивом.
  2. Оберните элементы в класс и сохраните индексы исходного массива внутри этого класса, избегая вашей функции сортировки.

Причина, по которой мне нужноэто, чтобы переставить строки в матрице, когда порядок перестановки определяется значениями в векторе.Значения в векторе должны быть в порядке возрастания, а строки в матрице должны быть соответствующим образом переставлены.

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

ИМХО, вам было бы лучше создать свой собственный дизайн, возможно, создать класс MyDataSorter с методом sort (yourArray), который возвращает отсортированный список вашего пользовательского класса, который также может принимать дженерики ... что-то вроде

List<OriginalOrderKeeper<MyDataType>> sort (MyDataType [] array)

1 голос
/ 08 февраля 2012

Почему бы не выполнить итерацию один раз над исходным массивом перед сортировкой и сохранением индексов в Map<Object, Integer>?

0 голосов
/ 08 февраля 2012

Предположим, что вы можете изменить порядок строк в матрице напрямую, вам не понадобится индекс.

Вы можете попробовать отсортировать их, используя Arrays.sort(Object[] a, Comparator c), используя специальный компаратор:

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;
    }

    }

Вы инициализируете компаратор с индексом столбца, релевантным для сравнения.

EDIT : строки и столбцы немного перепутались. Я предполагаю, что двойной массив [строки] [столбцы].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...