Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79

    [C#] Prelevare e rimuovere elementi di una lista

    Ciao ragazzi, sono sempre io... vi ringrazio per i precedenti consigli, adesso mi stavo cimentando in un nuovo esercizio, che consiste nel creare un gioco simile alla tombola.
    Adesso stavo provando a creare un metodo per estrarre numeri da 1 a 90, senza ripetere i numeri già usciti ovviamente.
    Avevo pensato di utilizzare una lista, contenente tutti i numeri da 1 a 90, estrarre un numero a caso e prendere il numero contenuto nella cella della lista ed incontemporanea rimuovere quella cella, così da evitare di prendere lo stesso numero...
    Mi chiedevo che metodo potessi usare per fare ciò... purtroppo nel mio libro non sono spiegati molto bene i metodi per le liste e spulciando i vari topic su internet ho paura di confondermi le idee ancora di più XD

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Usa il tipo List<T> (dove T identifica il tipo di dato da gestire nella lista generica).

    Nella documentazione trovi anche tutti i metodi e il loro preciso significato, oltre a vari esempi sull'utilizzo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    ciao,
    ma una ricerchina nel forum no eh!

    esempio

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79
    Ho notato quel topic, ma preferivo aprirne un altro per evitare di mischiare C# con VB... so che per uno esperto è la stessa cosa probabilmente, ma per me che ho iniziato da poco rischio di fare molta confusione...

    class Program
    {
    static void Main()
    {
    int numeroCasuale;
    for (int i = 0; i < 10; i++)
    {
    Random rnd = new Random((int)DateTime.Now.Millisecond);
    numeroCasuale = rnd.Next(9);

    ArrayList contenitoreNumeri = new ArrayList(10);
    contenitoreNumeri.Add(1);
    contenitoreNumeri.Add(2);
    contenitoreNumeri.Add(3);
    contenitoreNumeri.Add(4);
    contenitoreNumeri.Add(5);
    contenitoreNumeri.Add(6);
    contenitoreNumeri.Add(7);
    contenitoreNumeri.Add(8);
    contenitoreNumeri.Add(9);
    contenitoreNumeri.Add(10);

    Console.WriteLine("Il numero estratto è: " + contenitoreNumeri[numeroCasuale]);
    contenitoreNumeri.RemoveAt(numeroCasuale);
    Console.ReadLine();
    Console.Clear();
    }
    Console.ReadLine();
    }
    }
    Ho provato a scrivere questo codice, ma non fa ciò che mi serve... in teoria scritto così non dovrebbe prendere e stampare l'indice della lista e poi rimuoverlo?.. non riesco a capire come mai escono ugualmente numeri doppi...
    Ho messo solamente i primi 10 numeri per fare una prova..

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da HeroGian
    non riesco a capire come mai escono ugualmente numeri doppi...
    Ho messo solamente i primi 10 numeri per fare una prova..
    Sì, ma hai messo tutto all'interno di un ciclo:

    codice:
    for (int i = 0; i < 10; i++)
    Praticamente, aggiungi i primi 10 numeri... 10 volte!

    Per scoprirlo, a parte dedurlo dal codice che hai scritto, bastava eseguire il programma passo per passo e avresti notato la sequenza di istruzioni e l'effetto sulla lista che hai creato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da HeroGian
    Ho notato quel topic, ma preferivo aprirne un altro per evitare di mischiare C# con VB... so che per uno esperto è la stessa cosa probabilmente, ma per me che ho iniziato da poco rischio di fare molta confusione...



    Ho provato a scrivere questo codice, ma non fa ciò che mi serve... in teoria scritto così non dovrebbe prendere e stampare l'indice della lista e poi rimuoverlo?.. non riesco a capire come mai escono ugualmente numeri doppi...
    Ho messo solamente i primi 10 numeri per fare una prova..
    questa è la traduzione in c# (cambia solo il nome della classe e del metodo Main):

    codice:
    static class Lotto
            {
    
                static List<int> lista = new List<int>();
                public static void Start()
                {
                    // lista con i numeri
                    // in questo caso creati al volo, quindi per evitare la sequenzialità a tratti nell'estrazione 
                    // (visto che le estrazioni le metto tutte insieme nel ciclo)
                    // ho dovuto ricorrere ad uno sleep sul thread in modo da far si che cambi il seed passato per creare il numero random.
                    lista = Enumerable.Range(1, 90).ToList();
                    //simulo tutte le estrazioni
                    for (int i = 1; i <= 90; i++)
                    {
                        Console.WriteLine(string.Format("Estrazione numero {0} : Numero estratto : {1}", i, Estrazione()));
                        //fermo il thred 3 millisecondi (in modo che cambi il seed del random)
                        Thread.Sleep(3);
                    }
                    Console.ReadLine();
                }
    
                public static int Estrazione()
                {
                    Random random = new Random(DateTime.Now.Millisecond);
                    //creo il numero casuale con un range uguale al numero di elementi presenti nella lista
                    int nr = random.Next(lista.Count);
                    //leggo il valore corrispondente nella lista
                    int numeroEstratto = lista[nr];
                    //rimuovo il numero corrispondente dalla lista in modo che non sia più richiamato
                    lista.RemoveAt(nr);
                    //restituisco il numero estratto
                    return numeroEstratto;
                }
    
            }

  7. #7
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Se il tuo intento è creare un array di numeri casuali da 1 a 90 per la tombola allora puoi usare linq :
    codice:
    int[] vettore = Enumerable.Range(1,90).OrderBy(o => Guid.NewGuid()).ToArray();
    credo sia meglio di quello che ti ho suggerito io stesso in precedenza.

    Se invece ti interessa sapere come rimuovere elementi da una lista (domanda come da titolo) allora credo che le indicazioni date da alka siano le più corrette/mirate (studia )

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.