2015-05-06 5 views
0

Это мой несортированный массив:Сортировка массива по наибольшему количеству

P B A 
1 135 0 
2 102 100 
3 56 100 
4 148 0 
5 125 200 
6 65 200 

Это то, что мой текущий массив имеет после того как я отсортирован его это выход я получаю

P B A 
1 135 0 
4 148 0 
3 56 100 
2 102 100 
6 65 200 
5 125 200 

Я хочу, чтобы мой массив сортировать B по наибольшему числу в зависимости A как этот пример.

P B A 
4 148 0  
1 135 0 
2 102 100 
3 56 100 
5 125 200  
6 65 200 

Это в настоящее время мой код:

Arrays.sort(x, new Comparator<int[]>() { 
    public int compare(int[] o1, int[] o2) { 
     int ret = Integer.compare(o1[2], o2[2]); 
     // if the entries are equal at index 2, compare index 1 
     if (0 == ret) { 
      ret = Integer.compare(o1[1], o2[1]); 
     } 
     return (ret); 
    } 
}); 

ответ

0

Насколько я могу видеть, второй критерий сортировки (один для первого поля) происходит в обратном порядке, так что вернуть результат сравнения (обратите внимание на добавленный - оператор):

if (0 == ret) { 
    ret = -Integer.compare(o1[1], o2[1]); 
} 
+0

Почему так неэффективно? просто замените 'o1 [1]' на 'o2 [1]'. такой же результат, никаких дополнительных операций. я знаю, это арахисы, но все же – Paul

+0

Возможно, вы правы, но, на мой взгляд, эту вещь гораздо проще пропустить, чем оператор '-' при чтении кода. И, честно говоря, должен быть отличный класс для тех записей данных, которые реализуют 'Comparable'. – gvlasov

1

Просто инвертировать сравнение B в компараторе:

if (ret == 0) { 
    ret = Integer.compare(o2[1] , o1[1]); 
} 
+0

, но значения 'A' не от Longest до small, когда' A' '' 100', например –

+0

, вы должны вставить мой код в свой класс компаратора. просто замените 'if'-block на один из моего ответа – Paul