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

    C# Array di float: determinare quale numero è più grande....

    Salve... avrei una domanda.
    Come da titolo, ho un array di 6 numeri float che variano costantemente.


    Vorrei sapere quale di questi numeri è il più grande, ma sopratutto vorrei sapere come fare a determinare quale è il secondo più grande, quale il terzo ecc... fino all'ultimo.


    Devo usare Array.Sort()?
    Però...c'è un però.
    Io non voglio che la posizione dell'elemento dell'array cambi!
    Cioè, Numero[0] dovrà essere sempre Numero[0], non voglio che il suo id cambi.
    Con Array.Sort(), se per esempio Numero[2] diventa il più grande mi viene posto sull'array con l'id 0 ovvero diventerebbe Numero[0] e questo non posso farlo.
    Questo perché questi numeri sono abbinati ad una stringa (un nome)
    su un altro array di tipo string.
    Nome[0] ha il numero Numero[0], Nome[1] ha il numero Numero[1] ecc... E deve rimanere così.


    Vorrei solo sapere in che posizione è Nome[0], in che posizione è Nome[1] ecc... in base al numero ad esso abbinato dallo stesso id.


    Tipo:


    codice:
        
        if(Numero[0]>Numero[1]&&
                Numero[0]>Numero[2]&&
                Numero[0]>Numero[3]&&
                Numero[0]>Numero[4]&&
                Numero[0]>Numero[5])
                          print(Nome[0]+"E' primo");
    
    
    //Ho determinato il numero più grande.

    Ma come faccio a sapere quale di questi numeri è il secondo in ordine di grandezza, quale il terzo ecc..?


    Questi numeri cambiano costantemente e potrebbe succedere che il numero che un istante prima era il più grande diventi secondo perché superato da un altro...


    Ma come detto, non posso cambiare gli id dell'array, vorrei solo sapere quale in un determinato istante è il primo, il secondo ecc...


    Come si può fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da WILEz Visualizza il messaggio
    Salve... avrei una domanda.
    Come da titolo, ho un array di 6 numeri float che variano costantemente.


    Vorrei sapere quale di questi numeri è il più grande, ma sopratutto vorrei sapere come fare a determinare quale è il secondo più grande, quale il terzo ecc... fino all'ultimo.


    Devo usare Array.Sort()?
    Però...c'è un però.
    Io non voglio che la posizione dell'elemento dell'array cambi!
    Cioè, Numero[0] dovrà essere sempre Numero[0], non voglio che il suo id cambi.
    Con Array.Sort(), se per esempio Numero[2] diventa il più grande mi viene posto sull'array con l'id 0 ovvero diventerebbe Numero[0] e questo non posso farlo.
    Questo perché questi numeri sono abbinati ad una stringa (un nome)
    su un altro array di tipo string.
    Nome[0] ha il numero Numero[0], Nome[1] ha il numero Numero[1] ecc... E deve rimanere così.


    Vorrei solo sapere in che posizione è Nome[0], in che posizione è Nome[1] ecc... in base al numero ad esso abbinato dallo stesso id.


    Tipo:


    codice:
        
        if(Numero[0]>Numero[1]&&
                Numero[0]>Numero[2]&&
                Numero[0]>Numero[3]&&
                Numero[0]>Numero[4]&&
                Numero[0]>Numero[5])
                          print(Nome[0]+"E' primo");
    
    
    //Ho determinato il numero più grande.

    Ma come faccio a sapere quale di questi numeri è il secondo in ordine di grandezza, quale il terzo ecc..?


    Questi numeri cambiano costantemente e potrebbe succedere che il numero che un istante prima era il più grande diventi secondo perché superato da un altro...


    Ma come detto, non posso cambiare gli id dell'array, vorrei solo sapere quale in un determinato istante è il primo, il secondo ecc...


    Come si può fare?
    Ciao..
    Ci sono diversi modi per ottenere quello che vuoi.. Potresti fare una copia del tuo array (clone), ordinarlo, trovare il più grande e poi cercare all'interno del array originario quale indice occupa (funzione find)..
    Oppure lavorare un po con LINQ, che non è mai male.. Ad esempio il metodo Max oppure scrivi una query con Where...
    Posta un po' di esempi di codice scritti da te...
    Ultima modifica di renygade; 01-12-2013 a 20:45

  3. #3
    Io stavo provando così:


    codice:
    TempArray=ArrayNumeri; //Clono l'array su uno temporaneo
    
    
    Array.Sort(TempArray); //Metto in fila l'array temporaneo
    
    
    //Poi controllo se il primo elemento dell'array temporaneo che ho "sortato" (ovvero il più grande) è uguale ad uno dei numeri, allora vuol dire che quello è il più grande
    
    
    		if(ArrayNumeri[0]==TempArray[0])
    			print(ArrayNumeri[0]+" è primo");
    
    
    
    
    //Se il mio numero è uguale al secondo della lista, allora è secondo...
    		
    		if(ArrayNumeri[0]==TempArray[1])
    			print(ArrayNumeri[0]+" è secondo");

    Ma ancora non ci siamo...

  4. #4
    Ho provato anche con questa tecnica:

    codice:
    int p1 = 0; 
    int p2 = 0; 
    int p3 = 0;
    int p4 = 0; 
    int p5 = 0; 
    int p6 = 0;
            
    for(int i = 1; i<Num.Length; i++) 
    
         if(Num[i]>Num[p1])
         {    
          p6 = p5;
          p5 = p3;
          p4 = p3;
              p3 = p2;               
              p2 = p1;              
              p1 = i;                              
         }
    }
    
    
            print("p1"+Nome[p1]);
            print("p2"+Nome[p2]);
            print("p3"+Nome[p3]);
            print("p4"+Nome[p4]);
            print("p5"+Nome[p5]);
            print("p6"+Nome[p6]);
    Ma mi calcola correttamente solo la p1.
    Ultima modifica di WILEz; 01-12-2013 a 22:03

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa, ma i dati stringa associati ai valori dove stanno?

    Non puoi usare un oggetto di classe SortedList ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Allora... si tratta di un gioco di corse e adesso io voglio determinare chi si trova primo, chi secondo ecc...
    Ho un dato, ricavato da distanze e waypoints, il mio famoso array di numeri. Più il numero è alto e più l'auto si trova "avanti".

    Ho scritto questo metodo per associare il nome del pilota (stiamo parlando di AI) al suo numero di "metri percorsi" chiamato "Waypoint".

    Dunque io ho l'array "PilotaNick" e l'array "TWaypointPilota" e li associo così:


    codice:
    public static void CalcoloWaypoint (string Nick, float Waypoint) {
    		
    		
    		//Associo i WP ai Nick
    		 for(int i=0; i < (TWaypointPilota.Length); i++) {	
    		if(Nick==PilotaNick[i]){	
    		TWaypointPilota[i]=Waypoint;
    			}
    		}
    		
    
    
    	}
    Per questo non posso fare uno sort, per non perdere l'associazione...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se usi una classe (o una struttura) Pilota con il nome e il punteggio e usi una SortedList di oggetti Pilota risolvi facilmente.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Se usi una classe (o una struttura) Pilota con il nome e il punteggio e usi una SortedList di oggetti Pilota risolvi facilmente.
    Certo.. Oppure un SortedDictionary..

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.