Προς το περιεχόμενο

Απορία σε array στην Java


eirinikp

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια!

Έχω ένα array ακεραίων, το myArray. Κάθε θέση του διανύσματος αντιστοιχεί σε έναν κόμβο ενός γράφου, ενώ η τιμή που υπάρχει σε κάθε θέση του διανύσματος αντιστοιχεί σε ένα χαρακτηριστικό μέτρο αυτού του κόμβου. Θέλω να ταξινομήσω αυτό το διάνυσμα με βάση τις τιμές του (δηλαδή κάνω Arrays.sort(myArray) ). Θέλω μετά την ταξινόμηση, να ξέρω ποιος κόμβος αντιστοιχεί σε κάθε τιμή του myArray, όμως επειδή έχει ταξινομηθεί δεν μπορώ να πάρω την αντιστοίχηση θέσεων με κόμβους. Ούτε Map όμως μπορώ να πάρω, γιατί οι τιμές που παίρνει το myArray δεν είναι μοναδικές. Καμια καλή ιδέα?

Ευχαριστώ!

Δημοσ.
Δε σε "πιάνω".

Γιατί δεν χρησιμοποιείς ένα 2D array? :/

 

Ξαναδιάβασε την απάντηση. Την άλλαξα καμιά 50αριά φορές, μέχρι να φύγει το σύννεφο ομίχλης από το μυαλό μου! :-D

 

Και επειδή μάλλον δεν το έγραψα καθαρά:

Ναι! Θα χρησιμοποιήσω 2D array!!!!

 

PS: Ευχαριστώ!

Δημοσ.

Το θέμα είναι ότι δε θέλω τελικά 2D array, αλλά ένα δεύτερο array που να δείχνει στις θέσεις του πρώτου. Δηλαδή, έστω ότι αρχικά έχω το διάνυσμα

>10.0	10.0
20.0	20.0
5.0	5.0
50.0	50.0
70.0	70.0
7.0	7.0
0.0	0.0
10.0	10.0
36.0	36.0
20.0	20.0

και αφού το ταξινομήσω θα γίνει έτσι:

>0.0	10.0
5.0	20.0
7.0	5.0
10.0	50.0
10.0	70.0
20.0	7.0
20.0	0.0
36.0	10.0
50.0	36.0
70.0	20.0 

Εγώ όμως θέλω όταν κοιτάξω το στοιχείο [0][0], να δω ότι ήταν αρχικά στη θέση 6. Ή όταν κοιτάξω το [0][3] να δω ότι ήταν στη θέση 0, ενώ το [0][4] στη θέση 8 (ή και ανάποδα, δε με πειράζει). Και εννοείται ότι δε θέλω να κοιτάω μία μία τις θέσεις της δεύτερης στήλης.

Το ιδανικό θα ήταν να είχα μετά την ταξινόμηση κάτι τέτοιο:

>0.0	6
5.0	2
7.0	5
10.0	0
10.0	7
20.0	1
20.0	9
36.0	8
50.0	3
70.0	4

 

---------- Το μήνυμα προστέθηκε στις 13:26 ----------

 

Το έλυσα μόνη μου τελικά. Σας το δίνω για όσους ενδιαφέρονται:

>
       for( int i=0; i<10; ++i ) {
            pointers[i] = i;
       }
       public int compare(Object o1, Object o2) {
               Integer i1 = (Integer)o1;
               Integer i2 = (Integer)o2;
               if( mytest[i1] < mytest[i2]){
                   return -1;
               } else if( mytest[i1] > mytest[i2]) {
                   return 1;
               } else {
                   return 0;
               }
           }
       };
       Arrays.sort(pointers, c);
       Arrays.sort(mytest);

Όπου στο mytest υπάρχουν οι πραγματικές τιμές που ταξινομώ στην τελευταία γραμμη!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...