Avatar billede jonasbc Nybegynder
22. juli 2003 - 10:32 Der er 7 kommentarer og
1 løsning

Sortering af 2D array

Jeg er gået helt kold i et problem, og har lige brug for lidt hjælp....

Jeg har et 2D String array to kolonner og x antal rækker. Det indeholder aftemnings-resultater i følgende format: I den første række står en række navne, og i den anden række står et tal (castes til en int), der angiver, hvor mange % stemmer, der er kommet på det enkelte navn.

Problemet er nu, at jeg gerne vil ha' resultaterne sorteret efter antal stemmer. Dvs. at tal-rækken skal sorteres, og at navnene stadig skal stå sammen med det rigtige tal.

Jeg har hurtigt skrevet følgende, men han godt se, at hvis to eller flere navne har fået samme antal stemmer, opstår det problemer...

Jeg håber, der er nogen, der forstår problematikken.


String[][] finalArray = new String[array.length][2];
int[] intArray = new int[array.length];
       
//convert the row of numbers to an array of ints
for (int i=0; i<array.length; i++){
    intArray[i] = Double.valueOf(array[i][1]).intValue();
}

//
//her sorteres int arrayet
//

//the intArray is now sorted
for (int i=0; i<intArray.length; i++){

    //we get each int and find the matching string
    int number = intArray[i];

    finalArray[i][1] = number+"";

    boolean f = false;
    int n = 0;
    while (n<array.length && !f){
        if (Double.valueOf(array[n][1]).intValue() == number){
            finalArray[i][0] = array[n][0];
            f = true;
        }
        n++;
    }
}

return finalArray;
Avatar billede arne_v Ekspert
22. juli 2003 - 10:40 #1
Det problem løser man normalt ved at når man sorterer det ene array,
så "slæber man det andet array med" d.v.s. at når man bytter om på
element i og i i det array man sorterer efter, så bytter man samtidigt
om på element i og j i det array man "slæber med".
Avatar billede erikjacobsen Ekspert
22. juli 2003 - 10:42 #2
Eller man laver det til et 1D array af objekter, der så hver indeholder navn og tal.
Avatar billede arne_v Ekspert
22. juli 2003 - 10:44 #3
Her er et meget meget simpelt eksempel med en primitiv sortering:

public class TwoSort {
    public static void main(String[] args) {
        int[] ia = { 3, 2, 4, 1, 5 };
        String[] sa = { "tre", "to", "fire", "en", "fem" };
        for(int i = 0; i < (ia.length - 1); i++) {
            for(int j = (i + 1); j < ia.length; j++) {
                if(ia[i] < ia[j]) {
                    int itemp = ia[i];
                    ia[i] = ia[j];
                    ia[j] = itemp;
                    String stemp = sa[i];
                    sa[i] = sa[j];
                    sa[j] = stemp;
                }
            }
        }
        for(int k = 0; k < ia.length; k++) {
            System.out.println(ia[k] + " " + sa[k]);
        }
    }
}
Avatar billede arne_v Ekspert
22. juli 2003 - 10:46 #4
erik>

Ja - det er nok pænere fra et objekt orienteret synsvinkel.

Pointen er den samme.
Avatar billede erikjacobsen Ekspert
22. juli 2003 - 10:55 #5
Ved at gære det "rigtigt" kan man umiddelbart bruge Javas indbyggede sorteringsrutiner.
Avatar billede jonasbc Nybegynder
22. juli 2003 - 11:02 #6
arne: lækkert!
erik: jeg har desværre ikke mulighed for at anvende dine forslag, da jeg får arrayet fra en servlet, som jeg ikke umiddelbart kan ændre på. Desuden skal det køre i JDK 1.1.8, det ikke har sorterings-funktionaliteterne fra de nyere versioner
Avatar billede erikjacobsen Ekspert
22. juli 2003 - 11:19 #7
Det er selvfølgelig et godt argument. Menneskeheden kunne også overleve i
tusinder af år uden at opfinde hjulet ;))
Avatar billede arne_v Ekspert
22. juli 2003 - 11:25 #8
erik>

For en god ordens skyld: jeg vidste at vi var ovre i manuel sortering
fra et tidligere spørgsmål.
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