Repasando un viejo tema del curso anterior de Python, encontré una vez más que no se puede modificar el contenido
de un array (lista) sobre la cual estás "iterando"..(que palabra)
Este ejemplo se basa en encontrar los números impares de un array.
Tenéis que ir comentando y des-comentando las llamadas a cada procedimiento o función para ver las diferencias.
Viendo el contenido del array números.
Public Sub Main()
Dim numeros As Integer[] = [1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 93, 48, 76, 15, 7]
EliminarImpares1(numeros)
'EliminarImpares2(numeros)
'numeros = EliminarImpares3(numeros)
Stop
End
Public Sub EliminarImpares1(lista As Integer[])
'Falla
Dim numero As Integer
For Each numero In lista
If numero Mod 2 = 1 Then
If lista.Find(numero) <> -1 Then lista.Remove(lista.Find(numero))
Endif
Next
End
Public Sub EliminarImpares2(lista As Integer[])
'Funciona
Dim eliminados As New Integer[]
Dim numero As Integer
For Each numero In lista
If numero Mod 2 = 1 Then eliminados.Add(numero)
Next
For Each numero In eliminados
If lista.Find(numero) <> -1 Then lista.Remove(lista.Find(numero))
Next
End
Public Function EliminarImpares3(lista As Integer[]) As Integer[]
'Funciona
Dim nueva_lista As New Integer[]
Dim numero As Integer
'Solo nos interesa devolver los pares
For Each numero In lista
If numero Mod 2 = 0 Then nueva_lista.Add(numero)
Next
Return nueva_lista
End
Dim numeros As Integer[] = [1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 93, 48, 76, 15, 7]
EliminarImpares1(numeros)
'EliminarImpares2(numeros)
'numeros = EliminarImpares3(numeros)
Stop
End
Public Sub EliminarImpares1(lista As Integer[])
'Falla
Dim numero As Integer
For Each numero In lista
If numero Mod 2 = 1 Then
If lista.Find(numero) <> -1 Then lista.Remove(lista.Find(numero))
Endif
Next
End
Public Sub EliminarImpares2(lista As Integer[])
'Funciona
Dim eliminados As New Integer[]
Dim numero As Integer
For Each numero In lista
If numero Mod 2 = 1 Then eliminados.Add(numero)
Next
For Each numero In eliminados
If lista.Find(numero) <> -1 Then lista.Remove(lista.Find(numero))
Next
End
Public Function EliminarImpares3(lista As Integer[]) As Integer[]
'Funciona
Dim nueva_lista As New Integer[]
Dim numero As Integer
'Solo nos interesa devolver los pares
For Each numero In lista
If numero Mod 2 = 0 Then nueva_lista.Add(numero)
Next
Return nueva_lista
End
Ya veo que en gambas ocurre el mismo problema, es algo común entonces.
Saludos
Eliminar_numeros_impares.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | Eliminar_numeros_impares.tar.gz | |
Tamaño: | 4.8 KB | |
Descargado: | 24 veces |
Eliminar_numeros_impares.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | Eliminar_numeros_impares.tar.gz | |
Tamaño: | 4.8 KB | |
Descargado: | 24 veces |
Eliminar_numeros_impares.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | Eliminar_numeros_impares.tar.gz | |
Tamaño: | 4.8 KB | |
Descargado: | 24 veces |