Сортировать массив 2D по индексу Java - PullRequest
0 голосов
/ 13 октября 2018

Я работаю над 2D-массивом, и мне нужно организовать мой массив.Пояснение - мой массив является строкой Array, и он содержит в заголовке некоторое двойное значение, и я хочу отсортировать массив в зависимости от заголовка.

Первое, что я подумал, - это получить заголовок и отсортироватьheader, получите все столбцы массива в другом массиве и сравните значение заголовка, упорядоченного по каждому индексу столбца [0], и нажмите на другой массив.

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

На всякий случай:

Original array 
String[][]myArray = {{3,Toto,30},{2,Tata,29},{1,Titi,13}};

Array expected 
String[][]newArray = {{1,Titi,13},{2,Tata,29},{3,Toto,30}};

Открыто для предложения!Спасибо.

Редактировать: заголовок может иметь значение Double.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Предыдущий ответ только что вернул исходный массив, когда я попробовал.Вот что сработало для меня:

String[][] myArray = {{"3","Toto","30"},{"2","Tata","29"},{"1","Titi","13"}};
Arrays.sort(myArray, new Comparator<String[]>() {
    public int compare(String[] lhs, String[] rhs) {
        try {
            double lhs_value = Double.parseDouble(lhs[0]);
            double rhs_value = Double.parseDouble(rhs[0]);
            if (lhs_value < rhs_value) return -1;
            if (lhs_value > rhs_value) return 1;
            return 0; //else the two are equal
        } catch (NumberFormatException e) {
            //handle exception
            return 0;
        } 
    }
});

Мой вывод:

1 Titi 13 
2 Tata 29 
3 Toto 30 

Здесь Arrays.sort (см. Javadoc) принимает два параметра: массив you 're sorting (myArray) и Comparator (см. Javadoc) , который представляет собой интерфейс, позволяющий сравнивать два произвольных типа.Поскольку {"3", "Toto", "30"} - это не тип, который вы создали, а просто String[], мы собираемся встроить Comparator<String[]>.

Компараторы реализуют функцию «сравнения», которая принимает два элемента.и возвращает -1, 0 или 1, чтобы определить порядок элементов.По сути, «сравнить» вызывается несколько раз в процессе сортировки, чтобы точно определить порядок сортировки.Вот некоторый псевдокод:

public int compare(Object a, Object b)
    if (a comes "before" b) return -1
    if (a is "equal" to b) return 0
    if (a comes "after" b) return 1

Если это не ясно, вы можете узнать больше об интерфейсе Comparator здесь: https://www.geeksforgeeks.org/comparator-interface-java/

Я знаю, что использовал «до» и «после»ранее, которые немного нечеткие и не строгие.Если вы более склонны к математике, вот хорошее обсуждение интерфейса Comparator: https://math.stackexchange.com/questions/1400655/java-comparator-documentation-confused-about-the-terminology-total-order

0 голосов
/ 13 октября 2018

Если я вас правильно понял, похоже, что:

Arrays.stream(myArray)
      .sorted(Comparator.comparingDouble(x -> Double.valueOf(x[0])))
      .toArray(String[][]::new);  

Конечно, вы можете сделать это и на месте, через Arrays::sort и Comparator

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