Java сортировать массив на основе трех столбцов - PullRequest
1 голос
/ 10 ноября 2011

В моих поисках изучения Java я сталкиваюсь с одним сомнением.

Для сортировки одномерного массива мы можем использовать Arrays.sort (), но если я хочу отсортировать двумерный массив на основе трех столбцов? Есть ли возможность сделать это или я должен написать это для себя (что-то вроде трех вложенных циклов)?

Вот пример ввода:

13  2   28  36  
1   4   56  17  
4   2   5   40  
2   4   41  55  
9   5   48  12  
19  2   25  12  
20  5   13  8   
15  3   51  30  
12  5   39  59  
17  3   56  40  
3   1   56  46  
7   3   28  51  
8   5   14  58  
5   3   34  15  
14  4   53  2   
18  4   38  57  
6   2   16  25  
16  3   17  13  
10  5   41  33  
11  1   13  57  

Столбцы имеют тип int и хранятся в массиве целых чисел.

Я хочу отсортировать по столбцу 2, если найдены равные числа, то отсортировать по столбцу 3 и, наконец, если найдены равные, отсортировать по столбцу 3.

Вывод должен быть таким:

11  1   13  57  
3   1   56  46  
4   2   5   40  
6   2   16  25  
19  2   25  12  
13  2   28  36  
16  3   17  13  
7   3   28  51  
5   3   34  15  
15  3   51  30  
17  3   56  40  
18  4   38  57  
2   4   41  55  
14  4   53  2   
1   4   56  17  
20  5   13  8   
8   5   14  58  
12  5   39  59  
10  5   41  33  
9   5   48  12  

Есть ли простой способ сделать это? Помните, что я новичок в Java.

С уважением,

Favolas

Ответы [ 4 ]

2 голосов
/ 10 ноября 2011

Простое использование Comparator и использование Arrays.sort(arr, comparator);

1 голос
/ 10 ноября 2011

Используйте компаратор ниже

class MyArrayComparator implements Comparator<Integer[]> {

  @Override
  public int compare(Integer[] o1, Integer[] o2) {
    if (o1[1] == o2[1]) {
      if (o1[2] == o2[2]) {
        return o1[3].compareTo(o2[3]);
      }
      else {
        return o1[2].compareTo(o2[2]);
      }
    }
    return o1[1].compareTo(o2[1]);
  }

}

Используйте следующий метод сортировки

Collections.sort(yourListOfArry, new MyArrayComparator());
1 голос
/ 10 ноября 2011

Зависит от того, как вы получаете данные.

В общем, вы можете указать свои Comparator для Collections.sort .

0 голосов
/ 10 ноября 2011

Реализация Comparator для массивов массивов кажется мне довольно опасной, потому что вы должны вручную убедиться, что все массивы во втором измерении имеют одинаковую длину, а семантика компонентов массива должна быть одинаковой на всех времена - для такого рода ограничений должны использоваться объекты.

Если второе измерение в массиве имеет какое-то значение (т. Е. Оно всегда равно четырем, потому что три являются координатами, а четвертое - значением), вам следует подумать не о том, чтобы смоделировать его как массив массивов, а как массив объектов с четырьмя переменные-члены (например, xCoord, yCoord, zCoord и значение). Затем вы можете заставить этот класс реализовать интерфейс Comparable и реализовать метод compareTo. Затем метод Arrays.sort() будет сортироваться в соответствии с заданным методом compareTo.

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