Se trata simplemente de una clase que permite usar un array como un conjunto, es decir, él mismo se encarga de redimensionar al añadir o eliminar un elemento, y si un elemento ya se encuentra en el array, no lo vuelve a incluir. El conjunto lo he hecho de Integer, pero se puede hacer de cualquier objeto comparable.
Option Explicit
'cSet by Slek, for Indetectables.net
'31/5/2012
'Nota: Es un conjunto de Integer (puede ser modificado)
' It's an Integer's Set (can be modified)
Dim Arr() As Integer 'Array of elements
Dim s As Integer 'Number of elements included
Private Sub Class_Initialize()
'Initialize with 0 elements
s = 0
End Sub
Public Sub add(ByVal n As Integer)
'Include n
If Not contains(n) Then
ReDim Preserve Arr(s)
Arr(s) = n
s = s + 1
End If
End Sub
Public Sub remove(ByVal n As Integer)
'Exclude n
Dim i As Integer
Dim b As Boolean
For i = 0 To (s - 2)
If Arr(i) = n Then b = True
If b Then Arr(i) = Arr(i + 1)
Next i
s = s - 1
ReDim Preserve Arr(s - 1)
End Sub
Public Function size() As Integer
'Return number of elements
size = s
End Function
Public Function contains(ByVal n As Integer) As Boolean
'Returns if n has already been included
Dim i As Integer
For i = 0 To (s - 1)
If Arr(i) = n Then
contains = True
Exit Function
End If
Next i
contains = False
End Function
Public Function toArray() As Integer()
'Return Array
toArray = Arr
End Function
Ejemplo de uso:
Dim c As New cSet
Dim a() As Integer
Call c.add(1)
MsgBox c.Contains(1)
Call c.add(1)
Call c.add(30)
MsgBox c.size
Call c.remove(1)
a = c.toArray
Saludos!!
Esa clase no esta orientada a objetos. Es como el objeto Collection, solo que este no permite duplicados. Aunque algo es algo :P
No es recomendable aprender POO con vb6 :silbar:
@Slek HackerMira esto que hice hace tiempo:
cCollectionEx.cls (http://foro.elhacker.net/programacion_visual_basic/src_ccollectionexcls_by_psyke1-t302651.0.html)Y aún se puede mejorar mucho, que conste. :rolleyes:
Cita de: raul338 en 31 Mayo 2012, 22:26 PM
No es recomendable aprender POO con vb6 :silbar:
Qué gran verdad, sólo te vale para hacerte una lejana idea. :-\
DoEvents! :P
Uhmm muy bueno, no lo había visto jeje
Una pregunta, qué es mejor, crear el array de objetos dinámico o con un límite fijo, lo digo por eso de ocupar memoria.
Saludos!
HOLA!!!
Lo mejor es crear un array dinamico que se vaya agrandando siempre a 2*ubound(array). de esta manera tenes un metodo "exponencial de crecimiento" sin gastar mucha memoria.
Recomiendo iniciar el Array en 1024 Items.
GRACIAS POR LEER!!!
Cita de: Slek Hacker en 1 Junio 2012, 19:23 PM
Uhmm muy bueno, no lo había visto jeje
Una pregunta, qué es mejor, crear el array de objetos dinámico o con un límite fijo, lo digo por eso de ocupar memoria.
Saludos!
Es mejor crear paginas de memoria... implementando listas enlazadas... aun que todo depende del uso que se le de...
Dulces Lunas!¡.
Cita de: BlackZeroX (Astaroth) en 4 Junio 2012, 09:30 AM
Es mejor crear paginas de memoria... implementando listas enlazadas... aun que todo depende del uso que se le de...
Dulces Lunas!¡.
También tenía en mente implementar las listas enlazadas :P a ver si lo consigo.
Saludos! y gracias por comentar :)