eirinikp Δημοσ. 23 Απριλίου 2009 Δημοσ. 23 Απριλίου 2009 Γεια! Έχω ένα array ακεραίων, το myArray. Κάθε θέση του διανύσματος αντιστοιχεί σε έναν κόμβο ενός γράφου, ενώ η τιμή που υπάρχει σε κάθε θέση του διανύσματος αντιστοιχεί σε ένα χαρακτηριστικό μέτρο αυτού του κόμβου. Θέλω να ταξινομήσω αυτό το διάνυσμα με βάση τις τιμές του (δηλαδή κάνω Arrays.sort(myArray) ). Θέλω μετά την ταξινόμηση, να ξέρω ποιος κόμβος αντιστοιχεί σε κάθε τιμή του myArray, όμως επειδή έχει ταξινομηθεί δεν μπορώ να πάρω την αντιστοίχηση θέσεων με κόμβους. Ούτε Map όμως μπορώ να πάρω, γιατί οι τιμές που παίρνει το myArray δεν είναι μοναδικές. Καμια καλή ιδέα? Ευχαριστώ!
eirinikp Δημοσ. 23 Απριλίου 2009 Μέλος Δημοσ. 23 Απριλίου 2009 Δοκίμασε να χρησιμοποιήσεις ένα 2D array Άκυρο αυτό που έγραψα πριν. Ναι, έχεις δίκιο! ;-) Άμα γεράσει ο άνθρωπος...
Cue Δημοσ. 23 Απριλίου 2009 Δημοσ. 23 Απριλίου 2009 Δε σε "πιάνω". Γιατί δεν χρησιμοποιείς ένα 2D array? :/
eirinikp Δημοσ. 23 Απριλίου 2009 Μέλος Δημοσ. 23 Απριλίου 2009 Δε σε "πιάνω".Γιατί δεν χρησιμοποιείς ένα 2D array? :/ Ξαναδιάβασε την απάντηση. Την άλλαξα καμιά 50αριά φορές, μέχρι να φύγει το σύννεφο ομίχλης από το μυαλό μου! Και επειδή μάλλον δεν το έγραψα καθαρά: Ναι! Θα χρησιμοποιήσω 2D array!!!! PS: Ευχαριστώ!
eirinikp Δημοσ. 24 Απριλίου 2009 Μέλος Δημοσ. 24 Απριλίου 2009 Το θέμα είναι ότι δε θέλω τελικά 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 υπάρχουν οι πραγματικές τιμές που ταξινομώ στην τελευταία γραμμη!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.