Avatar billede langkiller Nybegynder
22. februar 2013 - 00:16 Der er 12 kommentarer og
1 løsning

sorter multi-dimensionelt array efter kolonne.

Har et 2-dimensionelt array med Strings i, som jeg godt kunne tænke mig at sorterer. Vil gerne kunne sorterer det efter en hvilken som helst af kolonnerne. Har et simpelt eksempel jeg vil bruge her, da det er nemmere at snakke om på den måde:

String[][] data = new String[10][3];
       

// Laver mit array
            for (int i=0; i<data.length; ++i) { 
              data[i][0] = "hh" + i; 
              data[i][1] = "dd" + i; 
              data[i][2] = "ss" + i; 
            } 
           
// Udskriver mit array
            String en,to,tre;
            for (int b=0; b<data.length; ++b) {
                en = data[b][0];
                to = data[b][1];
                tre = data[b][2];
                System.out.println(en + " " + to + " " + tre);
            }
       

håber nogen kan hjælpe mig her
Avatar billede arne_v Ekspert
22. februar 2013 - 01:29 #1
Et eksempel fra lageret:


import java.util.Arrays;
import java.util.Comparator;

public class TwoDimSort {
    private static Object[][] rows = new Object[][] {
            { 1, "Fil01", 213123123.0 },
            { 2, "Fil02", 123123123.0 },
            { 3, "Fil03", 324234234.0 },
            { 4, "Fil03", 234809238.0 },
            { 5, "Fil04", 098374932.0 },
            { 20, "Fil05", 123987928.0 },
            { 7, "Fil06", 979872398.0 },
            { 8, "Fil07", 234920384.0 },
            { 9, "Fil08", 324879283.0 },
            { 10, "Fil09", 347238923.0 } };
    public static void main(String[] args) {
        System.out.println("Before:");
        for (int i = 0; i < rows.length; i++) {
            for (int j = 0; j < rows[i].length; j++) {
                System.out.print(" " + rows[i][j]);
            }
            System.out.println();
        }
        Arrays.sort(rows, new Cmp());
        System.out.println("After:");
        for (int i = 0; i < rows.length; i++) {
            for (int j = 0; j < rows[i].length; j++) {
                System.out.print(" " + rows[i][j]);
            }
            System.out.println();
        }
    }
}

class Cmp implements Comparator<Object[]> {
    public int compare(Object[] o1, Object[] o2) {
        return (int)((Double)o1[2] - (Double)o2[2]);
    }
}
Avatar billede arne_v Ekspert
22. februar 2013 - 01:30 #2
String er lidt paenere end Object. Lad mig lige bixe noget.
Avatar billede arne_v Ekspert
22. februar 2013 - 01:49 #3

import java.util.Arrays;
import java.util.Comparator;

public class Sort2D {
    public static void print(String lbl, String[][] a) {
        System.out.println(lbl + ":");
        for(int i = 0; i < a.length; i++) {
            for(int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j]);
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        String[][] a = { { "A", "B", "C" }, { "C", "B", "A" }, { "B", "C", "A" }, { "A", "C", "B" } };
        print("Usorteret", a);
        Arrays.sort(a, new MyComparator(0));
        print("Sorteret efter 1. felt", a);
        Arrays.sort(a, new MyComparator(1));
        print("Sorteret efter 2. felt", a);
        Arrays.sort(a, new MyComparator(2));
        print("Sorteret efter 3. felt", a);
    }
}

class MyComparator implements Comparator<String[]> {
    private int fld;
    public MyComparator(int fld) {
        this.fld = fld;
    }
    public int compare(String[] o1, String[] o2) {
        return o1[fld].compareTo(o2[fld]);
    }
}
Avatar billede langkiller Nybegynder
22. februar 2013 - 02:57 #4
fedt tak for det !
Har et spørsgsmål mere. prøver at få arrayet til at blive vist i en jtable, men den siger jeg syntaxt fejl.. kan bare ikke rigtig finde ud af hvilken. her er udsnit af min kode

...
private String[][] data = new String[10][3];
private String[] cols    = {"Titel","Instruktør", "genre"};

public DVDOversigt() {
TableModel model = new DefaultTableModel(String[][] data, String[] cols);
table = new JTable(model);

...
Avatar billede langkiller Nybegynder
22. februar 2013 - 02:58 #5
private JTable table; fik jeg ikke lige med
Avatar billede arne_v Ekspert
22. februar 2013 - 03:05 #6
Hvad er den praecise fejl?
Avatar billede langkiller Nybegynder
22. februar 2013 - 03:20 #7
I denne linje:
TableModel model = new DefaultTableModel(String[][] data, String[] cols);

Jeg bruger eclipse hvor jeg får følgende fejl:
"Syntax errors on token(s), misplaced construct(s)"

"String[][]" og "String[]" har rød understregning.
Avatar billede arne_v Ekspert
22. februar 2013 - 03:32 #8
Mener du:

TableModel model = new DefaultTableModel(data, cols);

?
Avatar billede langkiller Nybegynder
22. februar 2013 - 03:53 #9
ja ved egentlig ikke hvorfor jeg havde skrevet det andet.. det virker næsten nu.. den viser ikke overskrifterne:
private String[] cols    = {"Titel","Instruktør", "genre"};
Avatar billede arne_v Ekspert
22. februar 2013 - 04:08 #10
Det synes jeg da at den burde.
Avatar billede langkiller Nybegynder
22. februar 2013 - 10:37 #11
Smed min JTabel ind i en JScrollPane.. det fik overskrifterne til at dukke op..
tænkte på en sidste ting, som du måske kunne hjælpe med. Nu ved jeg så ikke om det er det forkerte gui kombonent jeg har fat i, men ville helst ikke have den funktion som JTable har hvor man kan ændre indholdet i et felt ved at dobbeltklikke på det. En anden ting jeg gerne vil have den til, er at få den til at markere hele rækken ved klik på et af de pågældende felter. Er det noget man kan gøre på en nem måde eller skal jeg hen og bruge et helt anden kombonent?
Avatar billede langkiller Nybegynder
22. februar 2013 - 10:45 #12
bare glem det, jeg fik alligevel googlet mig frem til det.

TableModel model = new DefaultTableModel(data, cols);
        table_1 = new JTable(model) {
              public boolean isCellEditable(int rowIndex, int colIndex) {
                  return false;
              }
        };

jeg takker mange gange for hjælpen, du smider bare et svar
Avatar billede arne_v Ekspert
22. februar 2013 - 14:30 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester