Arrays.sort

3 respostas
thiagofesta

Boa tarde,

Gostaria de saber como alinhas um array multidimenssional, exemplo:

String[][] teste = new String[][]{ {"a", "2", "x", "sa"}, {"c", "3", "r", "as"}, {"b", "1", "s", "ss"} };

Ordernar uma dessas colunas, da seguinte forma, caso eu escolher a coluna 1, ele vai deixar assim:
a …
b …
c …

Caso seja na coluna 2:
b 1 …
a 2 …
c 3 …

Só que o array deve ser dessa forma…

É mais uma questão de lógica mesmo, pois acredito que não deva ter algum método para isto. Só sei que o Arrays.sort ordena um array simples.

O que me dizem disto? qual a melhor maneira de fazer?
Não precisam enviar código, enviem a lógica mesmo que já está ótimo :slight_smile:

3 Respostas

victorwss

Arrays.sort só serve para arrays de coisas que sejam ordenáveis. Já um array de arrays não é ordenável.

Neste caso você implementaria o algoritmo quicksort para estes arrays. Ou então use algum objeto que implemente a interface Comparable no lugar de usar arrays.

T
import java.util.*;

class SortByColumn {

    public static void print (String msg, String[][] tab) {
        System.out.println ("----------" + msg + "----------");
        for (int i = 0; i < tab.length; ++i) {
            for (int j = 0; j < tab[i].length; ++j) {
                System.out.print (tab [i][j] + ", ");
            }
            System.out.println ();
        }
    }
    public static void main(String[] args) {
        String[][] teste = new String[][]{  
            {"a", "2", "x", "sa"},  
            {"c", "3", "r", "as"},  
            {"b", "1", "s", "ss"}  
        }; 
        Arrays.sort (teste, new Comparator<String[]>() {
            public int compare (String[] linha1, String[] linha2) {
                return linha1[0].compareTo (linha2[0]);
            }
        });
        print ("Ordenando pela coluna 0", teste);
        Arrays.sort (teste, new Comparator<String[]>() {
            public int compare (String[] linha1, String[] linha2) {
                return linha1[1].compareTo (linha2[1]);
            }
        });
        print ("Ordenando pela coluna 1", teste);
    }

}

Saída esperada:

----------Ordenando pela coluna 0----------
a, 2, x, sa,
b, 1, s, ss,
c, 3, r, as,
----------Ordenando pela coluna 1----------
b, 1, s, ss,
a, 2, x, sa,
c, 3, r, as,
thiagofesta

Uoldiss :slight_smile:
thingol, tu manja muito ein cara!
Obrigado ai por ajudar, vou dar uma olhada nesse tal de Comparator ai, nunca tinha visto.

Valeu ai victorwss

Criado 20 de outubro de 2008
Ultima resposta 21 de out. de 2008
Respostas 3
Participantes 3