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

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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''".
+
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'' ".
 
 
  
 +
====Esempi su valori numerici====
 
Mostriamo un esempio pratico, nel quale saranno eliminati solo gli elementi contenenti numeri dispari:
 
Mostriamo un esempio pratico, nel quale saranno eliminati solo gli elementi contenenti numeri dispari:
  '''Public''' Sub Main()
+
  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 numeri As Byte[] = [1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 92, 48, 76, 15, 7, 1, 3]
   Dim b As Byte
+
   Dim i As Integer
 
 
  EliminaDispari(numeri)  <FONT Color=gray>' ''Essendo un array, il passaggio dell'argomento può avvenire per Indirizzo''</font>
 
 
 
  For Each b In numeri
 
    Print b
 
  Next
 
 
    
 
    
'''End'''
+
  While i < bb.Count
+
    If Not Even(numeri[i]) Then
 +
      numeri.Remove(i)
 +
    Else
 +
      Inc i
 +
    Endif
 +
  Wend
 
   
 
   
  '''Private''' Function EliminaDispari(lista As Byte[])  <FONT Color=gray>' ''Riceve il parametro per Indirizzo''</font>
+
  <FONT Color=gray>' ''Mostra quanto ottenuto dal ciclo precedente:''</font>
 +
  For Each b As Byte In numeri
 +
    Print b
 +
  Next
 
    
 
    
  Dim x As Byte
+
  End
 
+
In quest'altro esempio, invece, si desidera eliminare gli elementi con valore "zero":
  While x < lista.Count
+
  Public Sub Main()
    If lista[x] Mod 2 > 0 Then
 
      lista.Remove(x)
 
      Continue
 
    Endif
 
    Inc x
 
  Wend
 
 
 
  '''End'''
 
 
 
 
 
In questo esempio, in cui si desidera eliminare gli elementi con valore zero, si adotterà un'altra modalità:
 
  '''Public''' Sub Main()
 
 
    
 
    
 
   Dim bb As Byte[]
 
   Dim bb As Byte[]
Riga 39: Riga 29:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  bb = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 9, 0]
+
  bb = [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 9, 0]
 
+
 
  While i < bb.Count
+
  While i < bb.Count
    If bb[i] == 0 Then
+
    If bb[i] == 0 Then bb.Remove(i)
      bb.Remove(bb.Find(0), 1)
+
    Inc i
      i = -1
+
  Wend
    Endif
+
    Inc i
+
<FONT Color=gray>' ''Mostra quanto ottenuto dal ciclo precedente:''</font>
  Wend
+
  For Each b In bb
 
+
    Print b
  For Each b In bb
+
  Next
    Print b
+
 
  Next
+
End
 
+
 
  '''End'''
+
====Esempi sulle stringhe di caratteri====
 +
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
 +
 +
<FONT Color=gray>' ''Mostra quanto ottenuto dal ciclo precedente:''</font>
 +
  For Each s As String In ss
 +
    Print s
 +
  Next
 +
 +
End
 +
o così:
 +
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
 +
   
 +
<FONT Color=gray>' ''Mostra quanto ottenuto dal ciclo precedente:''</font>
 +
  For Each s As String In ss
 +
    Print s
 +
  Next
 +
 
 +
  End
 +
o anche usando la funzione "Split()" e il Metodo ".Join()" dell'array di tipo ''String'':
 +
Public Sub Main()
 +
 +
  Dim ss As String[] = ["Aaaaa", Null, "Bbbbb", "", "Ccccc", Null, "Ddddd", "Eeeee", "Fffff", ""]
 +
 
 +
  ss = Split(ss.Join(","), ",", "", True)
 +
 +
<FONT Color=gray>' ''Mostra quanto ottenuto dalla riga precedente:''</font>
 +
  For Each s As String In ss
 +
    Print s
 +
  Next
 +
 +
End

Versione attuale delle 08:05, 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 ".

Esempi su valori numerici

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 i As Integer
  
 While i < bb.Count
   If Not Even(numeri[i]) Then 
     numeri.Remove(i)
   Else 
     Inc i
   Endif 
 Wend

' Mostra quanto ottenuto dal ciclo precedente:
 For Each b As Byte In numeri
   Print b
 Next
 
End

In quest'altro esempio, invece, si desidera eliminare gli elementi con valore "zero":

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(i)
   Inc i
 Wend

' Mostra quanto ottenuto dal ciclo precedente:
 For Each b In bb
   Print b
 Next
 
End

Esempi sulle stringhe di caratteri

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

' Mostra quanto ottenuto dal ciclo precedente:
 For Each s As String In ss
   Print s
 Next

End

o così:

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

o anche usando la funzione "Split()" e il Metodo ".Join()" dell'array di tipo String:

Public Sub Main()

 Dim ss As String[] = ["Aaaaa", Null, "Bbbbb", "", "Ccccc", Null, "Ddddd", "Eeeee", "Fffff", ""]
 
 ss = Split(ss.Join(","), ",", "", True)

' Mostra quanto ottenuto dalla riga precedente:
 For Each s As String In ss
   Print s
 Next

End