[VB6] cSet (Orientación a objetos)

Iniciado por Slek Hacker, 31 Mayo 2012, 21:41 PM

0 Miembros y 1 Visitante están viendo este tema.

Slek Hacker

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.

Código (vb) [Seleccionar]
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:

Código (vb) [Seleccionar]
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!!

raul338

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:

Psyke1

@Slek Hacker
Mira esto que hice hace tiempo:
cCollectionEx.cls
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

Slek Hacker

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!

79137913

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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BlackZeroX

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!¡.
The Dark Shadow is my passion.

Slek Hacker

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 :)