Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [JAVA] Ordinamento matrice rispetto ad un campo

    Salve, ho una matrice con nxm e vorrei ordinarla in base alle colonne (m), naturalmente una colonna per volta, come posso fare?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Ordinamento matrice rispetto ad un campo

    Originariamente inviato da Reddragoon
    Salve, ho una matrice con nxm e vorrei ordinarla in base alle colonne (m), naturalmente una colonna per volta, come posso fare?
    Innanzitutto dovresti precisare dati di che tipo.

    Poi comunque visto che parli di ordinare "una colonna", allora è evidente che l'insieme dei dati che costituiscono una "colonna" non rappresenta un array "lineare". Pertanto è una cosa particolare e nel framework standard di Java non c'è nulla per fare cose del genere.
    Quindi devi implementare tu un algoritmo di ordinamento, uno tra quelli "noti", es. bubblesort, quicksort ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Mi spiego meglio, la matrice contiene valori double, siccome devo prendere i primi valori di ogni colonna in ordine crescente, mi servirebbe fare appunto questo tipo di ordinamento.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Mi è venuto il dubbio adesso. Intendi "ordinare i dati in una colonna" o "ordinare le righe della matrice in base ai valori di una colonna"??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ehm....è un pò complicato, cerco di essere chiaro con un esempio.

    0.2356 0.7895
    0.0112 0.8796
    0.0100 0.4785
    .... ....

    Quello che voglio è poter ordinare la prima colonna come nell'esempio(poi la seconda, la terza, ecc...), leggere i valori che mi interessano in ordine crescente; naturalmente le righe devono spostarsi quando fa l'ordinamento della colonna in questione. Spero di essermi spiegato bene, è un mezzo c... sta cosa.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reddragoon
    ehm....è un pò complicato, cerco di essere chiaro con un esempio.

    0.2356 0.7895
    0.0112 0.8796
    0.0100 0.4785
    .... ....

    Quello che voglio è poter ordinare la prima colonna come nell'esempio(poi la seconda, la terza, ecc...), leggere i valori che mi interessano in ordine crescente; naturalmente le righe devono spostarsi quando fa l'ordinamento della colonna in questione. Spero di essermi spiegato bene, è un mezzo c... sta cosa.
    Allora è il secondo caso che ho citato appena prima.
    Devi ordinare le righe in base ai valori di una/più colonne.

    La questione a questo punto diventa però più semplice, perché non devi implementare tu l'algoritmo di ordinamento!!

    In Java gli array multidimensione sono semplicemente "array di array". Cioè un array che contiene riferimenti ad altri array, ecc...

    Pertanto per la tua matrice c'è un array principale che contiene riferimenti agli array delle righe (che contengono N valori per le colonne). E ogni riga la devi vedere come "un record".

    Se la tua matrice è double[][], vuol dire che l'array principale contiene N riferimenti ad array double[]. Quindi tu devi ordinare l'array principale e gli elementi da trattare sono dei double[].
    Concettualmente non ci sarebbe differenza nell'ordinare un array di oggetti XYZ basandosi su una o più "proprietà" dell'oggetto (es. oggetti Persona e ordinarli per cognome poi nome).

    Ti basta pertanto implementare la interfaccia Comparator in modo che il compare() sappia di riceve 2 double[] di cui poi tu vai a comparare una o più colonne in "cascata".

    Non mi dilungo troppo, vedi questa discussione in cui facevo un esempio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok, solo una cosa non mi è chiara, come faccio a stabilire che mi debba ordinare i valori della prima colonna e solo dopo averli letti quelli della seconda????p.s. per i valori double rispetto all'esempio che mi hai linkato devo cambiare qualcosa nell'if?
    Grazie

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reddragoon
    come faccio a stabilire che mi debba ordinare i valori della prima colonna e solo dopo averli letti quelli della seconda????
    Qui bisogna solo capire meglio (io l'ho ipotizzato ma non sono ancora sicuro che sia questo che volevi) se queste colonne le devi comparare in "cascata".

    Per farti di nuovo lo stesso paragone fatto prima, se tu avessi 2 oggetti Persona potresti decidere di ordinare per cognome/nome, vuol dire cioè che prima confronti i 2 cognomi e solo se questi sono uguali allora vai a confrontare i nomi.

    Originariamente inviato da Reddragoon
    per i valori double rispetto all'esempio che mi hai linkato devo cambiare qualcosa nell'if?
    I valori double li puoi comunque confrontare con i soliti operatori <, >, <=, >=.
    Ma nota che la classe Double ha già un compare() che riceve 2 double e restituisce il risultato della comparazione. Che in questo caso può essere molto utile (purtroppo non c'è l'equivalente per int in Integer .... ecco perché in quel post avevo usato < > ).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Ok, mi è chiaro, ho visto ora il metodo compare.
    Per quanto riguarda i controllli, io voglio ordinare solo la prima colonna, fare le mie operazioni e poi ordinare solo la secondo colonna, ecc...

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reddragoon
    Per quanto riguarda i controllli, io voglio ordinare solo la prima colonna, fare le mie operazioni e poi ordinare solo la secondo colonna, ecc...
    Potresti fare un unico comparatore che può essere parametrato (tramite costruttore) circa la colonna da ordinare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.