Italian rimuovere elementi specifici da una list

3394509365

Active Member
Licensed User
Longtime User
Buongiorno ho una list con dei numeri, i numeri dentro la list si possono ripetere uguali anche più volte.

Praticamente devofare sei sorteggi di numero random ad ogni sorteggio di numero devo levare dalla mia lista il numero sorteggiato anche se c' è più volte.

e quindi al secondo giro il primo numero sorteggiato non ci deve essere mai.

In vb.net facevo così

B4X:
NuovaLista.RemoveAll(Function(r) r.ToString = 44)

per sempio toglievo dalla lista tutti i numero che erano il 44. è molto comodo.

Se non esiste una funzione simile mi pare che devo girare la list finche non li tolgo tutti ma ad ogni giro cambia l' indice degli items perchè si riduce di uno.

Potete aiutarmi ?
 

udg

Expert
Licensed User
Longtime User
Per la questione indice, ti basta partire dal fondo
 

LucaMs

Expert
Licensed User
Longtime User
Se ti serve una lista dalla quale pescare un numero alla volta, sarebbe meglio usare un metodo diverso, che eventualmente ti spiegherò o allegherò un esempio, che si fa pure prima.

Per rimuovere un solo elemento in base al suo valore:
Dim Valore As Int = 44
List1.RemoveAt(List1.IndexOf(Valore))

Per rimuoverli tutti (tutti quelli che contengono Valore), dovrai usare un Loop ("Do While" o "Do Until"), fino a che Index Of ti restituisca -1 (non trovato).
 

3394509365

Active Member
Licensed User
Longtime User
Risolto, ecco il codice

grazie


B4X:
'converto in stringa il numero estratto
            Dim nnn As String =numeroestratto
                
            For t =listaPassata2.Size-1 To 0 Step-1
                
                If listaPassata2.get(t) = nnn Then
                    listaPassata2.RemoveAt((t))
                    Log ("tolto "  & nnn)
                End If
            Next 'listaPassata2.RemoveAt((value))
 

Star-Dust

Expert
Licensed User
Longtime User
Risolto, ecco il codice

grazie


B4X:
'converto in stringa il numero estratto
            Dim nnn As String =numeroestratto
               
            For t =listaPassata2.Size-1 To 0 Step-1
               
                If listaPassata2.get(t) = nnn Then
                    listaPassata2.RemoveAt((t))
                    Log ("tolto "  & nnn)
                End If
            Next 'listaPassata2.RemoveAt((value))
?‍♂️
 

Sagenut

Expert
Licensed User
Longtime User
Un altro modo potrebbe essere
B4X:
Do While (listapassata2.IndexOf(n) > -1)
    listapassata2.RemoveAt(listapassata2.IndexOf(n))
Loop
dove n è il numero da rimuovere.
 
Top