2013-09-23 2 views
2

У меня есть два массива, один из них - String [], а другой - int []. Значения в массиве integer соответствуют элементам массива String. Например, массив String содержит имена некоторых команд, а другой массив int содержит свои очки в лиге. Я могу сортировать массив int с помощью массива Arrays.sort, и я хочу сортировать массив String в соответствии с точками, и если две команды имеют одинаковые точки, я должен упорядочить их по алфавиту.Связать два массива и отсортировать их вместе

Я могу сделать 2D-массив, но как его отсортировать?

+0

Вам нужен класс - 'Team' с атрибутом' name' и 'point'. В Интернете есть много таких примеров, и СА. Пожалуйста, найдите его. –

+0

Это зависит от области. Если команды существуют вне этих результатов, вам нужен класс 'Team', а также класс TeamResults. –

+0

Вместо этого вы можете использовать карту и отсортировать ее, как описано здесь: http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – Aliza

ответ

4

Рассмотрим создание класса:

class Team { 
    String name; 
    int numPoints; 
} 

и имеющий множество Team[] teams. Затем вы можете создать компаратор для этих объектов, которые сортируются на основе как критериев String, так и Integer.

1

Вам было бы легко сделать это, если бы вы создали класс, который содержит оба значения для команды, и чтобы класс реализовал интерфейс Comparable. Тогда было бы тривиально сортировать массив этих объектов с помощью массива Arrays.sort.

0

Создать класс и добавить два компаратора:

class Team{ 
    private String teamName; 
    private int leaguePoints; 
    public static final Comparator<Team> BY_NAME = new ByName(); 
    public static final Comparator<Team> BY_POINTS = new ByPoints(); 
    private static class ByName implements Comparator<Team> 
    { 
     public int compare(Team a, Team b) 
     return a.name.compareTo(b.name); 
    } 
    private static class ByPoints implements Comparator<Team> 
    { 
     public int compare(Team a, Team b) 
     return a.leaguePoints - b.leaguePoints; 
    } 
} 

Затем отсортировать массив для этого класса, используя BY_NAME компаратор первым, а затем BY_POINTS.

Arrays.sort(array, Team.BY_NAME); 
Arrays.sort(array, Team.BY_POINTS); 

Убедитесь, что использовать стабильную сортировку, чтобы сохранить относительный порядок одинаковых ключей (То есть, если точки равны, то неустойчиво вроде как выбор вида могли бы испортить отсортированный порядок названий команд).

Смежные вопросы