Как отсортировать простой целочисленный 2-мерный массив? - PullRequest
0 голосов
/ 27 октября 2011

У меня есть двумерный массив, который имеет размеры myArray[x][3]. Мне нужно отсортировать массив на основе [x][0]. Я использовал Arrays.sort(myArray);. Это работало, однако, массив в то время был одномерным массивом myArray[x]. Затем я передумал и превратил его в двумерный массив. Он заполнен целыми числами от 1 до 9. Я искал метод clear для сортировки 2-мерных массивов и не могу найти простых объяснений. Пожалуйста, помогите.

Спасибо; Ice

Хорошо, вот код:

public static void sortArray(int myArray[][]){
Arrays.sort(myArray, new Comparator<Integer[]>(){
    @Override
    public int compare(Integer[] o1, Integer[] o2) {
        return o1[0].compareTo(o2[0]);
    }
});

Это сработало?

ОК, здесь проблема. Сортированный массив начинается с несортировки, например:

3 - 0 - 0
4 - 0 - 1
5 - 0 - 2
6 - 0 - 3
3 - 0 - 4

Первый столбец [0][x] - это значение, второй столбец [1][x] - это число полей массива, а последний столбец [2][x] - это фактический номер столбца в массиве. Общий метод, берет всю строку из исходного двухмерного массива и загружает ее в массив размером 3 на x, а затем сортирует массив по столбцу [0][x]. Вот результат после вызова функции сортировки:

0 - 0 - 3
0 - 1 - 4
0 - 2 - 5
0 - 3 - 6
0 - 4 - 3

Каким-то образом метод, который я скопировал и вставил, заменяет числа, похоже, сортировка неправильная. Одинаковое System.out.print используется на обоих выходах.

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Если я правильно понял:

    Integer[][] numbers = new Integer[][]{{7, 8, 9}, {1, 2, 3}};
    System.out.println("Before:");
    for(Integer[] row : numbers) {
        for(Integer num : row) {
            System.out.print(num);
        }
        System.out.println("");
    }

    Arrays.sort(numbers, new Comparator<Integer[]>(){
        @Override
        public int compare(Integer[] o1, Integer[] o2) {
            return o1[0].compareTo(o2[0]);
        }
    });
    System.out.println("After:");
    for(Integer[] row : numbers) {
        for(Integer num : row) {
            System.out.print(num);
        }
        System.out.println("");
    }

Отпечатки:

Before:
789
123
After:
123
789

Обновление:

Это именно то, что вам нужно.

public static void sortArray(int myArray[][]) {
    Arrays.sort(myArray, new Comparator<int[]>() {

        @Override
        public int compare(int[] o1, int[] o2) {
            return Integer.valueOf(o1[0]).compareTo(Integer.valueOf(o2[0]));
        }

    });
}

Обновление2:

Сортировка каждой строки:

public static void sortEachRow(int myArray[][]) {
    for(int[] row : myArray) {
        Arrays.sort(row);
    }
}
0 голосов
/ 27 октября 2011

Это должно работать.

public static void main(final String[] args) 
{
    Integer[][] numbers = new Integer[][] {{7, 8, 9}, {1, 2, 3}};
    sortArray(numbers);
    for (Integer[] s : numbers) {
        System.out.println(s[0] + " " + s[1] + " " + s[2]);
    }
}

public static void sortArray(Integer myArray[][])
{ 
    Arrays.sort(myArray, new Comparator<Integer[]>()
    { 
            @Override 
            public int compare(Integer[] o1, Integer[] o2) 
            {
                    return o1[0].compareTo(o2[0]); 
            } 
    }); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...