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

    [c#] mescolare elementi array

    Ciao a tutti amici di html forum !

    Sono alle prese con un array di numeri da 0 a 9 in ordine crescente che devo mescolare a caso e non ci riesco perciò chiedo il vostro aiuto.
    Ho provato anche a cercare ma ho trovato informazioni solo su altri linguaggi che non capisco e niente in c#.
    Ho fatto un algoritmo che me li mescola ma alcuni me li doppia ad esempio vengono due 8 e non so il motivo.
    Allego il codice sperando in un vostro aiuto.
    codice:
     int totale=100;
                int[] vettore =  {0,1,2,3,4,5,6,7,8,9};           
                
                //MESCOLO
                Random casuale = new Random(DateTime.Now.Millisecond);
                int temp;
                
                do
                {
                    temp=casuale.Next (1,9);
                    temp = vettore[temp+1];
                    vettore[temp] = vettore[temp-1];
                    
    
                    totale--;
                }while(totale>0);
                    
               					    
                for(int i=0;i<10;i++)
                {
                    Console.WriteLine(vettore[i]);
                }
                Console.ReadLine();
    Cristian

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao,
    il motivo è che i numeri casuali generati sono ovviamente indipendenti dalla generazione precedente, sono sempre inclusi nel range stabilito e non vi è nessuna certezza che non si ripetano. Per evitare la ripetizione usa un List<int> al posto dell'array, poi crei il numero casuale con range massimo equivalente al numero di elementi della lista di int, a questo punto usi il numero casuale come indice per la lista di int e ne prendi il valore e lo aggiungi alla tua lista che contiene i numeri casuali, successivamente rimuovi dalla lista di int l'elemento corrispondente (di cui hai preso il valore con numero random) e ricrei un nuovo numero casuale con il nuovo numero di elementi contenuti nella lista. In questo modo non avrai doppioni sui numeri casuali.

    Riscrivi tutto perchè con quella roba li non vai da nessuna parte in quanto non hai certezza di riuscita e sprechi risorse per nulla...

    Con questo esempio ti basterebbe cambiare il Console.WriteLine con il metodo Add della tua lista di numeri (quindi aggiungendo i numeri), e magari ottimizzarlo per la tua esigenza.

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao, credo che l'ottimizzazione migliore che puoi fare per ottenere ciò che vuoi sia questa:
    codice:
    int[] vettore = Enumerable.Range(0,9).OrderBy(o => Guid.NewGuid()).ToArray();
    così ottieni un array di numeri casuali da 0 a 9

    edit:
    ovviamente se hai già un array e lo vuoi rimescolare non devi utilizzare Enumerable.Range
    codice:
    //vettore già esistente (ovviamente ordinato come ti pare, anche sequenziale)
    int[] vettore = new int[] { 4, 5, 8, 7, 3, 2, 1, 0, 6, 9 };
    
    //ordini in modo casuale
    vettore = vettore.OrderBy(o => Guid.NewGuid()).ToArray();

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 © 2026 vBulletin Solutions, Inc. All rights reserved.