Differenze tra le versioni di "Eliminare più elementi da un array"

Da Gambas-it.org - Wikipedia.
Riga 52: Riga 52:
 
    
 
    
 
  End
 
  End
Similmente per eliminare degli elementi ''vuoti'' in un array di topo String[]:
+
Similmente per eliminare degli elementi ''vuoti'' in un array di tipo String[]:
 +
Public Sub Main()
 +
 +
  Dim ss As String[] = ["Aaaaa", Null, "Bbbbb", "", "Ccccc", Null, "Ddddd", "Eeeee", "Fffff", ""]
 +
 +
  For i As Integer = ss.Max DownTo 0
 +
    If ss[i] = Null Then ss.Remove(i)
 +
  Next
 +
 +
  For Each s As String In ss
 +
  Next
 +
 +
End
 +
o anche:
 
  Public Sub Main()
 
  Public Sub Main()
 
   
 
   
Riga 59: Riga 72:
 
    
 
    
 
   While i < ss.Count
 
   While i < ss.Count
     If ss[i] == Null Then
+
     If ss[i] == Null Then ss.Remove(i)
      ss.Remove(ss.Find(Null), 1)
 
      i = 0
 
    Endif
 
 
     Inc i
 
     Inc i
 
   Wend
 
   Wend

Versione delle 05:20, 23 giu 2024

Per eliminare più elementi da un vettore, ad esempio sulla base dei valori in ciascuno di essi contenuti, si utilizzarà un ciclo con il Metodo ".Remove()" dell'oggetto vettore, avendo cura nel codice della ovvia riduzione della quantità corrente degli elementi nell'array, al fine di non incorrere in un errore di "Out of Bounds ".


Mostriamo un esempio pratico, nel quale saranno eliminati solo gli elementi contenenti numeri dispari:

Public Sub Main()
 
 Dim numeri As Byte[] = [1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 92, 48, 76, 15, 7, 1, 3]
 Dim b As Byte
  
 EliminaDispari(numeri)   ' Essendo un array, il passaggio dell'argomento può avvenire per Indirizzo
  
 For Each b In numeri
   Print b
 Next
 
End


Private Function EliminaDispari(lista As Byte[])   ' Riceve il parametro per Indirizzo
 
 Dim x As Byte
  
 While x < lista.Count
   If lista[x] Mod 2 > 0 Then
     lista.Remove(x)
     Continue
   Endif
   Inc x
 Wend
 
End

In esempio invece, in cui si desidera eliminare gli elementi con valore zero, si adotterà un'altra modalità:

Public Sub Main()
 
 Dim bb As Byte[]
 Dim b As Byte
 Dim i As Integer
  
 bb = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 9, 0]
 
 While i < bb.Count
   If bb[i] == 0 Then
     bb.Remove(bb.Find(0), 1)
     i = 0
   Endif
   Inc i
 Wend
 
 For Each b In bb
   Print b
 Next
 
End

Similmente per eliminare degli elementi vuoti in un array di tipo String[]:

Public Sub Main()

 Dim ss As String[] = ["Aaaaa", Null, "Bbbbb", "", "Ccccc", Null, "Ddddd", "Eeeee", "Fffff", ""]

 For i As Integer = ss.Max DownTo 0
   If ss[i] = Null Then ss.Remove(i)
 Next

 For Each s As String In ss
 Next

End

o anche:

Public Sub Main()

 Dim ss As String[] = ["Aaaaa", Null, "Bbbbb", "", "Ccccc", Null, "Ddddd", "Eeeee", "Fffff", ""]
 Dim i As Integer
 
 While i < ss.Count
   If ss[i] == Null Then ss.Remove(i)
   Inc i
 Wend
    
' Mostra quanto ottenuto dal ciclo precedente:
 For Each s As String In ss
   Print s
 Next
 
End