Fecha y hora actual: Viernes 23 Jun 2017 19:49
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.32 - Colecciones, VB 2005

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.32 - Colecciones, VB 2005

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3145
Ubicación: Valencia - España

Mensaje Publicado: Viernes 09 Oct 2009 03:29

Título del mensaje: Curso VB .NET - Tema 1.32 - Colecciones, VB 2005

Responder citando

Curso de programación en .NET - Tema 1.32 - Colecciones, Visual Studio 2005


1. Colecciones, VB.
1.1 Objetivos del tema.

Explicar las características de las colecciones.

1.2 Introducción.
Podríamos definirlas como una enumeración, a la que se le pueden añadir o quitar elementos.
Podríamos definirlas como un array que en lugar de ser estático en el número de elementos, permite la adición y la eliminación de elementos, o sea que es dinámico, y que además esos elementos pueden ser objetos.

Desde el momento en que podemos declarar un array del tipo de un objeto determinado, un array es muy similar a una colección.
En VB las clases que gestionan colecciones son:

    Array
    System.Collections

La clase array para la gestión con matrices.

La clase Collections dispone de dos clases a su vez:
    Generic
    Specialized

Los métodos para una colección son los necesarios para la gestión de la misma, y dado que no disponemos de un índice propiamente dicho, la gestión se basa en su recorrido, adición y eliminación.

Las colecciones disponen de un Enumerador que es un objeto que recorre en iteración su colección asociada. La instrucción for each utiliza el enumerador y oculta la complejidad que supone su uso.

Todas las colecciones pueden copiarse en una matriz usando el método CopyTo, sin embargo, el orden de los elementos de la nueva matriz se basará en la secuencia en la que los devuelve el enumerador. La matriz resultante siempre es unidimensional, vector, y su límite inferior es cero.
Algunas clases Collections tienen capacidades de ordenación y la mayor parte están indexadas. La administración de la memoria se controla automáticamente y la capacidad de una colección se expande si es necesario.

Las clases System Collections pueden dividirse en tres tipos:
  • Colecciones utilizadas normalmente --> Son las variaciones habituales de las colecciones de datos, como tablas hash, colas, pilas, diccionarios y listas. Las colecciones que su usan habitualmente tienen versiones genéricas y no genéricas.
  • Colecciones de bits --> Se trata de colecciones cuyos elementos son indicadores de bits. Se comportan de forma ligeramente diferente de las demás.
  • Colecciones especializadas --> Se trata de colecciones con fines muy específicos, normalmente para tratar un tipo concreto de elemento, como StringDictionary.


Los tipos de colecciones a utilizar se basan en la forma en la que se realiza el acceso. Lista Secuencial en la que se descarta el miembro tras su recuperación, Lifo, Fifo.
    Snack, Pilas
    Queue, Colas
    LinkedList

Si se desea acceder por un índice
    StringCollection --> ArrayList
    List --> HashTable
    SortedList --> ListDictionary
    StringDictionary

A su vez cada una de ellas en casos concretos son mejores que otras, por ejemplo ListDictionary es más rápida que HashTable en colecciones pequeñas.

1.3 Creación.
La definición de una colección es como sigue.
Código:
Dim Coleccion As System.Collections.SortedList

La forma de añadir elementos
Código:
Coleccion.add(123,"Mesas")

Conviene que realice la creación de la colección con distintos tipos de colección y observe el cambio de los métodos disponibles en la misma en función del tipo elegido.
Código:
Dim Coleccion As System.Collections.Queue

En este tipo de colección el insertar un elemento tiene una sintaxis distinta.
Código:
Dim Algo as New Object
Dim Objetos As New System.Collections.Queue
Objetos.Enqueue(Algo)

Se está utilizando una cola, una lista.

Todo esto va englobado después en una estructura repetitiva en la cual se crea la colección para tratarla posteriormente.
Pero el uso de una colección no se limita al uso de algo tan sencillo como un string.
Podemos utilizar objetos en una colección.
Podemos hacer éste otro uso en una colección:

Creamos una clase de la que instanciar luego objetos.
Código:
Public Class Datos
   Public Nombre As String

   Public Sub New()
   End Sub
End Class

Para después realizar algo parecido a lo siguiente:
Código:
Module Module1
  Sub Main()
    Console.WriteLine("Carga colección de objetos.")
   
    Dim Coleccion As System.Collections.Generic.List(Of Datos)
    Dim Item As New Datos
   
    Item.Nombre = "Silla"
    Coleccion.Add(Item)
   
    Item = New Datos()
    Item.Nombre = "Naranja"
    Coleccion.Add(Item)
  End Sub
End Module


El ejemplo anterior funciona correctamente tal como se describe, sin embargo como prueba de lo que a veces la lógica te puede llevar a hacer, conviene probarlo comentando la siguiente línea.
Código:
Item = new Datos()

El resultado es que al recorrer la colección, se muestra solo el último valor introducido en la misma.

1.4 Recorrido.
La forma de recorrerla es creando una estructura repetitiva, esta estructura va a depender en cierta medida del tipo de colección creada, pero veamos dos formas de hacerlo.
Código:
Sub Main()
  Dim Coleccion As New System.Collections.Generic.List(Of Datos)
  Dim Item As New Datos
 
  Item.Nombre = "Silla”
  Coleccion.Add(Item)
 
  Item = New Datos()
  Item.Nombre = "Naranja”
  Coleccion.Add(Item)
 
  Dim x As Integer = 0
  While x < Coleccion.Count
     Console.WriteLine(Coleccion.Item(x).Nombre)
     x=x+1
  End While
  Console.ReadLine()
End Sub


Y en este caso utilizando el bucle del tipo For each, que suele ser válido para casi todas.
Código:
Dim Dato As Datos
For Each Dato In Coleccion
   Console.WriteLine(Dato.Nombre)
Next

El primer ejemplo es fácil de entender, hemos creado un bucle en el que progresamos desde x igual a cero hasta el número de elementos que tiene la colección.

El segundo ejemplo se basa en que el bucle For each es un bucle especializado en esta tarea y solo hay que darle el tipo de dato a leer en la colección a la que pertenece.

En las colecciones donde se utiliza clave y valor, el recorrido es de esta forma.
Código:
Dim Coleccion As New System.Collections.Generic.SortedList(Of Integer, String)
Coleccion.Add(1, "Silla")
Coleccion.Add(2, "Mesa")
Coleccion.Add(3, "Puerta")

' PV es una Pareja de Valores
' PV es del tipo KeyValuePair(Of Integer, String)
For Each PV As KeyValuePair(Of Integer, String) In Coleccion
   Console.WriteLine("Clave = {0}, Valor = {1}", PV.Key, PV.Value)
Next


Hay que ser consecuente con la declaración de la colección.
Código:
Dim Coleccion As New System.Collections.Generic.SortedList(Of Integer, String)

Para después utilizar el objeto PV con la declaración adecuada, (Of Integer, String)

1.5 Operaciones con una colección.
Una vez que disponemos de una colección, además de la acción de añadir elementos y recuperar elementos de la colección, podemos quitar elementos, comparar elementos.

1.5.1 Métodos principales.
  • Add --> Añade un elemento a la colección
  • Clear --> Limpia, vacía el contenido de la colección.
  • Clone --> Obtiene una copia de la colección actual.
  • Contains --> Determina si el elemento de referencia existe en la colección
  • CopyTo --> Realiza una copia del contenido de la matriz sobre un array.
  • Equals --> Determina si el objeto de referencia es igual al objeto actual.
  • Find --> Busca un elemento en la colección.
  • GetRange --> Devuelve un array que es un subconjunto de la colección
  • IndexOf --> Devuelve la posición de la primera aparición del objeto de referencia en la colección.
  • Insert --> Inserta un elemento en la colección
  • InsertRange --> Inserta los elementos especificados en la posición indicada.
  • LastIndexOf --> Devuelve la última posición de la primera aparición del objeto de referencia en la colección.
  • Remove --> Quita la primera aparición del elemento especificado.
  • RemoveAt --> Quita el elemento de la posición especificada.
  • RemoveRange --> Quita los elementos del rango especificado
  • SetRange --> Copia el rango especificado en un array
  • Sort --> Clasifica la colección.

ToArray Copia la colección en un array.

1.5.2 Adición, add.
Hemos visto como se usa el método add,
Código:
Coleccion.Add(Item)


Pero hay que tener presente que hay varios tipos de colecciones, y el método Add puede cambiar según el tipo de la misma, he aquí un ejemplo.
Código:
Dim Coleccion As New System.Collections.SortedList
Coleccion.Add(1, "Silla")
Coleccion.Add(2, "Mesa")
Coleccion.Add(3, "Puerta")
Console.WriteLine(Coleccion.ContainsValue("Silla"))


O bien esta otra.
Código:
Dim Coleccion As New System.Collections.Generic.SortedList(Of String, String)
Coleccion.Add("1", "Silla")
Coleccion.Add("Dos", "Mesa")
Coleccion.Add("3", "Puerta")


En la que podríamos haber declarado también
Código:
Dim Coleccion As New System.Collections.Generic.SortedList(Of Integer, String)


Para el primero de los ejemplos.
Código:
Coleccion.Add(2, "Mesa")


Las dos colecciones no son iguales.
Código:
Dim Coleccion As New System.Collections.SortedList
Dim Coleccion As New System.Collections.Generic.SortedList(Of Integer, String)


1.5.3 Borrado, clear, remove.
Para borrar disponemos de los métodos Clear, Remove, RemoveAt, RemoveRange. Borra el elemento con el índice indicado.
Código:
Coleccion.RemoveAt(1)


Borra los elementos que se indican, Cuantos, desde la posición indicada PosiciónInicial.
Código:
Coleccion.RemoveRange(PosiciónInicial, Cuantos)


Borra el primer elemento que sea igual al objeto de referencia.
Código:
Item.Nombre = "Silla"
Coleccion.Remove(Item)


También podemos borrar todo el contenido de la colección utilizando el método clear.
Código:
Colección.Clear()


1.5.4 Posición de un elemento, indexOf.
Si deseamos saber la posición de un elemento, podemos utilizar el método indexOf.
Este método nos devuelve la posición del elemento en la colección, o el valor -1 si no lo encuentra.

La sintaxis es
Código:
Posicion = Coleccion.IndexOf(Item)
Console.WriteLine(Coleccion.IndexOf(Item))


Para la siguiente colección.
Código:
Sub Main()
  Console.WriteLine("Carga colección de objetos.")
  Dim Coleccion As New System.Collections.Generic.List(Of Datos)
  Dim Item As New Datos
  Item.Nombre = "Silla"
  Coleccion.Add(Item)
 
  Item = New Datos()
  Item.Nombre = "Mesa"
  Coleccion.Add(Item)
 
  Dim x As Integer
  While x < Coleccion.Count
     Console.WriteLine(Coleccion.Item(x).Nombre)
     x=x+1
  End While
End Sub


Un ejemplo:
Código:
Item = Coleccion.Item(0)
Console.WriteLine(Coleccion.IndexOf(Item))
Posicion = Coleccion.IndexOf(Item)
Console.WriteLine(Posicion)


La salida del ejemplo es cero en los dos casos.
Como peculiaridad hay que ver el siguiente ejemplo.
Código:
Item = New Datos
Item.Nombre = "Silla"
Console.WriteLine(Coleccion.IndexOf(Item))


Siendo que el elemento “Silla” existe en la colección previamente a la declaración del nuevo Item, el resultado de la salida será –1, no encontrado, y es que aunque el valor existe en la colección, el item declarado en si es nuevo, y no está en la misma, aunque su valor sea coincidente, es la única explicación coherente basada en

Código:
Dim Dato As Datos
For Each Dato In Coleccion
   Console.WriteLine(Dato.Nombre)
   Console.WriteLine(Dato.Nombre.GetHashCode)
Next

Item = New Datos
Item.Nombre = "Silla"
Console.WriteLine(Item.GetHashCode)
Console.WriteLine(Coleccion.IndexOf(Item))


Y en este otro ejemplo


Código:
    Console.WriteLine("Antes")
    Dim Dato As Datos
    For Each Dato In Coleccion
      Console.WriteLine("Valor {0}", Dato.Nombre)
      Console.WriteLine("HashCode {0}", Dato.Nombre.GetHashCode)
    Next
   
    Console.WriteLine("Creación de item")
    Item = New Datos
    Item.Nombre = "Silla"
    Console.WriteLine("HashCode {0}", Item.GetHashCode)
    Console.WriteLine("IndexOf {0}", Coleccion.IndexOf(Item))
    Console.WriteLine("Contains {0}", Coleccion.Contains(Item))
    Console.WriteLine("Despues")
    Console.WriteLine("Adición de item")
    Coleccion.Add(Item)
    Console.WriteLine("HashCode {0}", Item.GetHashCode)
    Console.WriteLine("IndexOf {0} ", Coleccion.IndexOf(Item))
    Console.WriteLine("Contains {0} ", Coleccion.Contains(Item))
    Console.WriteLine("Bucle")
    For Each Dato In Coleccion
      Console.WriteLine("Valor {0} ", Dato.Nombre)
      Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode)
    Next
    Console.ReadLine()
  End Sub
End Module


Si nos fijamos en el hashcode, veremos que cuando está fuera de la colección tiene un valor distinto que cuando está dentro, que además es el mismo que el elemento con el mismo valor.

Ambos ejemplos arrancan con la misma carga de la colección previa.
Si este ejemplo le repetimos con datos de tipos estándar, el ejemplo sin embargo no se cumple, ¿por qué?, porque si yo busco el 2, o la “A” en una colección de enteros o de caracteres, el dos o está o no, pero porque es el número dos no es un objeto nuevo en una colección que contiene la misma información que otro elemento de la colección.

El dos o la “A”, pertenecen a la colección de los números enteros o de caracteres, ya de antemano, y existen o no en nuestra colección.

1.5.5 Inserción, insert, insertRange.
Inserta el elemento especificado en la posición indicada.
Código:
Item.Nombre = "Tres"
Item.Longitud = 3
Coleccion.Insert(2, Item)


En el ejemplo se inserta el item indicado en la colección en la posición dos, la posición ha de existir en la colección, y su contenido se sustituye por el nuevo.

Valor inicial de la colección - Valor final de la colección después de la inserción.
    1 Uno - 1 Uno
    2 Dos - 2 Tres

El valor de la segunda posición se sustituye por el nuevo valor.
El método insertRange inserta los elementos indicados a partir de la posición indicada.
Código:
Dim Otra As New System.Collections.Generic.List(Of Datos)

Item = New Datos()
Item.Nombre = "Tres"
Item.Longitud = 21
Otra.Add(Item)
Item = New Datos()
Item.Nombre = "Cuatro"
Item.Longitud = 42
Otra.Add(Item)
Coleccion.InsertRange(2, Otra)


Valor inicial de la colección - Valor final de la colección después de la inserción.
1 Uno - 1 Uno
2 Dos - 2 Dos
- 3 Tres
- 4 Cuatro

1.5.6 Copiado de la colección, CopyTo, ToArray.
El método CopyTo nos permite obtener un array del contenido de la colección.
El método ToArray también, cambia la sintaxis, por ser una función.

La sintaxis para la declaración del vector V, puede ser así:
Código:
Dim V(Coleccion.Count -1) As Datos

es
Código:
Coleccion.CopyTo(V)
V = Coleccion.ToArray()


La utilización puede ser:
Código:
Dim V(Coleccion.Count -1) As Datos
Coleccion.CopyTo(V)
For Each Dato In V
   Console.WriteLine("Valor {0} ", Dato.Nombre)
   Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode)
Next


Código:
Dim V(Coleccion.Count -1) As Datos

Usamos Colección.count –1 para que el array quede bien declarado en su número de elementos.
La colección se inicia en el elemento uno y el vector en el elemento cero.
La colección si tiene tres elementos son el 1,2 y 3.
El vector sería el 0,1 y 2.

1.5.7 Clone.
Realiza una copia superficial de una colección, sólo copia los elementos de dicha colección, tanto si son tipos de referencia como si son tipos de valor, pero no copia los objetos a los que hacen referencia las referencias. Las referencias de la nueva colección apuntan a los mismos objetos que las referencias de la colección original.

La sintaxis para utilizar el método Clone es:
Código:
Otra = CType(Coleccion.Clone(), SortedList)


Ctype es para permitir el cambio de una colección a otra. Y la clonación se realiza en realidad así:
Código:
Coleccion.Clone()


Un ejemplo completo para el uso de Clone.
Código:
Dim Coleccion As New System.Collections.SortedList
Dim Otra As New System.Collections.SortedList

Coleccion.Add(1, "Silla")
Coleccion.Add(2, "Mesa")
Coleccion.Add(3, "Puerta")

For x = 0 To Coleccion.Count -1
   Console.WriteLine(" Clave {0} Valor {1} ", _
   Coleccion.GetKey(x), Coleccion.GetByIndex(x))
Next
Otra = CType(Coleccion.Clone(), SortedList)
For x = 0 To Otra.Count -1
   Console.WriteLine(" Clave {0} Valor {1} ", Otra.GetKey(x), Otra.GetByIndex(x))
Next


1.5.8 Comparar, Contains, ContainsKey, ContainsValue.
Podemos comprobar si determinada información existe o no en una colección.
El método que lo realiza es contains, que devuelve true o false.
La sintaxis del mismo es
Código:
Coleccion.Contains(Item))

Siendo Item
Código:
Item = New Datos
Item.Nombre = "Silla"

Y su utilización por ejemplo:
Código:
Console.WriteLine("Contains {0} ", Coleccion.Contains(Item))


Donde “Silla” es el dato que deseamos comprobar, pero recordemos que no buscamos “Silla”, si no un elemento en esa colección, que está representado por Item, y que es este caso contiene “Silla”

En las colecciones en las que se dispone de clave y valor el uso es el que sigue.
Código:
Console.WriteLine(Coleccion.ContainsValue("Silla"))
Console.WriteLine(Coleccion.ContainsKey("2"))


1.5.9 Comparar dos objetos, Equals.
Realiza una comparación y devuelve true si ambos objetos son iguales.
La sintaxis es
Código:
Coleccion.Item(1).Equals(Otra.Item(2))

Un ejemplo de su utilización
Código:
Console.WriteLine(Coleccion.Item(1).Equals(Otra.Item(2)))


1.5.10 Obtener un subconjunto de la colección, GetRange.
Devuelve un array que es un subconjunto de la colección origen.
Realiza la copia del contenido de la colección pero no de los enlaces de sus miembros.
La sintaxis es la que sigue.
Código:
Coleccion.GetRange(Desde, Cuantos)

Donde desde es la primera posición desde la que se inicia la copia
Cuantos es el número de elementos que se van a copiar.
Un ejemplo:
Código:
V = Coleccion.GetRange(1, 2).ToArray()

En el que V es un vector del mismo tipo que los objetos de la colección.
Código:
V = Coleccion.GetRange(1, 2).ToArray()
For Each Dato In V
   Console.WriteLine("Valor {0} ", Dato.Nombre)
Next


1.5.11 Búsqueda, Find, FindAll, FindIndex, FindLastIndex.
Disponemos de varias posibilidades a la hora de realizar búsquedas.
Una de ellas es la de obtener todos los elementos de una colección que cumplan un requisito, para ello utilizamos el método FindAll.
Código:
Nueva = Coleccion.FindAll(AddressOf Resultado)


Primero hemos de crear una colección que recoja el resultado
Código:
Dim Nueva As New System.Collections.Generic.List(Of Datos)


Después solo queda utilizar el método.
Para ello se recurre a una función que analiza el valor del elemento de la colección que se le envía devolviendo true o false e incorporándolo a la nueva colección.

La función la hemos llamado Resultado
Código:
Public Function Resultado(ByVal Item As Datos) As Boolean
   Resultado = Item.Nombre = "Silla"
End Function


Y en este caso devolverá todos los elementos que sean una “Silla”
Código:
Dim Nueva As New System.Collections.Generic.List(Of Datos)
Nueva = Coleccion.FindAll(AddressOf Resultado)

For Each Dato In Nueva
   Console.WriteLine("Valor {0} ", Dato.Nombre)
Next


Para saber el índice de un elemento
Código:
Console.WriteLine(Coleccion.FindIndex(AddressOf Resultado))


Siguiendo la misma filosofía que en el ejemplo anterior.
En éste caso nos devolverá el índice que ocupa en la colección el elemento buscado.

1.5.12 Clasificación, Sort.
Realiza la clasificación del contenido de la colección.
Todos los tipos de colecciones no disponen de este método debido a las características de la colección en si.
Un ejemplo de su utilización.

Código:
Console.WriteLine("Sort")
Dim Coleccion As New System.Collections.Generic.List(Of String)

Coleccion.Add("Silla")
Coleccion.Add("Mesa")
Coleccion.Add("Armario")

Dim D As String
For Each D In Coleccion
   Console.WriteLine("Valor {0} ", D)
Next

Coleccion.Sort()
For Each D In Coleccion
   Console.WriteLine("Valor {0} ", D)
Next


1.6 Propiedades.
Capacity Obtiene o establece el número de elementos de una colección.
Count Devuelve el número de elementos de una colección
Item Obtiene o establece el elemento en la posición indicada.

1.7 Ejercicios propuestos.
1.-Crear una colección que nos permita la gestión de los valores del tipo
    Código
    Denominación

2.-Introducir diez números y luego visualizarlos en orden inverso, al de entrada.
3.-Crear un programa que nos permita gestionar la cola de un dentista con el siguiente contenido
    Número de orden
    Nombre

4.-Tenemos que almacenar los nombres de las personas que van a asistir a un evento.
Estas personas se irán identificando a medida que se van incorporando al mismo. Necesitamos poder acceder posteriormente a sus datos, teniendo en cuenta que pueden ser
    Ponentes
    Invitados
    Organización


1.8 Solución a los ejercicios propuestos.
1.-Crear una colección que nos permita la gestión de los valores del tipo
    Código
    Denominación

Código:
Module Ejercicios
  Public Sub Uno()
    Dim Coleccion As New System.Collections.Generic.SortedList(Of Integer, String)
   
    Coleccion.Add(1, "Silla")
    Coleccion.Add(25, "Mesa")
    Coleccion.Add(3, "Puerta")
    ' PV es una Pareja de Valores
    ' PV es del tipo KeyValuePair(Of Integer, String)
   
    For Each PV As KeyValuePair(Of Integer, String) In Coleccion
       Console.WriteLine("Clave = {0}, Valor = {1}", PV.Key, PV.Value)
    Next
  End Sub
End Module

Sub Main
  Uno()
End Sub


2.-Introducir diez números y luego visualizarlos en orden inverso, al de entrada.
Código:
Module Ejercicios
  Public Sub Dos()
    Dim Pila As New Collections.Stack
    Dim Dato As Ejercicio
   
    Dato = New Ejercicio
    Dato.Codigo = 1
    Dato.Nombre = "Uno"
    Pila.Push(Dato)
    Dato = New Ejercicio
    Dato.Codigo = 2
    Dato.Nombre = "Dos"
    Pila.Push(Dato)
    Dato = New Ejercicio
    Dato.Codigo = 3
    Dato.Nombre = "Tres"
    Pila.Push(Dato)
   
    For Each Dato In Pila
       Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Next

    Console.WriteLine("Quitado un elemento.")
    Dato = CType(Pila.Pop, Ejercicio)
    Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Console.WriteLine("Añadido un elemento, cuatro.")
    Dato = New Ejercicio
    Dato.Codigo = 4
    Dato.Nombre = "Cuatro"
    Pila.Push(Dato)
    Console.WriteLine("Inicio de nuevo bucle.")

    For Each Dato In Pila
       Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Next
 
    Console.WriteLine("Quitado un elemento.")
    Dato = CType(Pila.Pop, Ejercicio)
    Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Console.WriteLine("Inicio de nuevo bucle.")
   
    For Each Dato In Pila
       Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Next
  End Sub
End Module

Sub Main
   Dos()
End Sub


3.-Crear un programa que nos permita gestionar la cola de un dentista con el siguiente contenido
    Número de orden
    Nombre

Código:
Module Ejercicios
  Private Class Ejercicio
    Public Nombre As String
    Public Codigo As Integer
    Public Sub New()
  End Sub
  End Class
 
  Private Sub Tres()
    Dim Cola As New Collections.Queue
    Dim Dato As Ejercicio
   
    Dato = New Ejercicio
    Dato.Codigo = 1
    Dato.Nombre = "Uno"
    Cola.Enqueue(Dato)
    Dato = New Ejercicio
    Dato.Codigo = 2
    Dato.Nombre = "Dos"
    Cola.Enqueue(Dato)
   
    For Each Dato In Cola
       Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Next
   
    Dato = CType(Cola.Dequeue, Ejercicio)
    Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Dato = New Ejercicio
    Dato.Codigo = 3
    Dato.Nombre = "Tres"
    Cola.Enqueue(Dato)
    Console.WriteLine("Quitado y añadido un elemento, Inicio de nuevo bucle.")
   
    For Each Dato In Cola
       Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Next
   
    Dato = CType(Cola.Dequeue, Ejercicio)
    Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Console.WriteLine("Quitado un elemento, Inicio de nuevo bucle.")
   
    For Each Dato In Cola
       Console.WriteLine("código {0} nombre {1} ", Dato.Codigo, Dato.Nombre)
    Next
  End Sub
End Module

Sub Main
   Tres()
End Sub


4.-Tenemos que almacenar los nombres de las personas que van a asistir a un evento.
Estas personas se irán identificando a medida que se van incorporando al mismo. Necesitamos poder acceder posteriormente a sus datos, teniendo en cuenta que pueden ser
    Ponentes
    Invitados
    Organización

Código:
Module Ejercicios
  Private Class Ejercicio
    Public Nombre As String
    Public Codigo As Integer
    Public Tipo as String
    Public Sub New()
    End Sub
  End Class
 
  Private Function Resultado(ByVal Item As Ejercicio) As Boolean
     Resultado = Item.Tipo = "P"
  End Function
 
  Public Sub Cuatro()
    Dim Evento As New System.Collections.Generic.List(Of Ejercicio)
    Dim Persona As Ejercicio
   
    Persona = New Ejercicio
    With Persona
       .Codigo = 1
       .Nombre = "Pedro"
       .Tipo = "P"
    End With
 
    Evento.Add(Persona)
    Persona = New Ejercicio
 
    With Persona
       .Codigo = 2
       .Nombre = "Luisa"
       .Tipo = "P"
    End With
 
    Evento.Add(Persona)
    Persona = New Ejercicio
 
    With Persona
       .Codigo = 1
       .Nombre = "Imma"
       .Tipo = "I"
    End With
 
    Evento.Add(Persona)
    Persona = New Ejercicio
   
    With Persona
       .Codigo = 2
       .Nombre = "Javier"
       .Tipo = "I"
    End With
 
    Evento.Add(Persona)
    Persona = New Ejercicio
 
    With Persona
       .Codigo = 1
       .Nombre = "Carlos"
       .Tipo = "O"
    End With
 
    Evento.Add(Persona)
    Persona = New Ejercicio
 
    With Persona
       .Codigo = 2
       .Nombre = "Cristina"
       .Tipo = "O"
    End With
 
    Evento.Add(Persona)
 
    For Each Persona In Evento
       With Persona
          Console.WriteLine("Tipo {0} código {1} nombre {2} ",.Tipo,.Codigo,.Nombre)
       End With
    Next
   
    Dim Ponentes As New System.Collections.Generic.List(Of Ejercicio)
    Ponentes = Evento.FindAll(AddressOf Resultado)
   
    For Each Persona In Ponentes
       Console.WriteLine("Ponentes {0} ", Persona.Nombre)
    Next
  End Sub
End Module



Autor del curso: casiopea


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Robotito



Registrado: 16 Dic 2016
Mensajes: 1

Mensaje Publicado: Viernes 16 Dic 2016 19:53

Título del mensaje: Curso VB .NET - Tema 1.32 - Colecciones, VB 2005

Responder citando

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

string valor = "";
int número = 0;
bool encontrado = false;
Stack Pila = new Stack();

private void button1_Click(object sender, EventArgs e)
{
valor = textBox1.Text;
número = Convert.ToInt32(valor);
Pila.Push(número);
textBox1.Clear();
textBox1.Focus();
}



private void button2_Click(object sender, EventArgs e)
{
número = (int)Pila.Pop();
textBox1.Clear();
textBox1.Focus();
}

private void button3_Click(object sender, EventArgs e)
{
Pila.Clear();
textBox1.Focus();
}

private void button4_Click(object sender, EventArgs e)
{
valor = textBox1.Text;
número = Convert.ToInt32(valor);
encontrado = Pila.Contains(número);
if (encontrado == true)
MessageBox.Show("El número " + número + " se encuentra en la pila");
else
{
MessageBox.Show("El número " + número + " NO se encuentra en la pila");
}
textBox1.Clear();
textBox1.Focus();

}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button5_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
foreach (int n in Pila)
{
listBox1.Items.Add(n);

}
textBox1.Focus();
}
}
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 1 Hora

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Curso de PHP-WordPress avanzado

wordpressadict PHP 1 Domingo 27 Nov 2016 18:59 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso fundamentos de programación

Yaser Programación en general 0 Martes 17 May 2016 23:28 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de Desarrollo en Inteligencia Artificial

JL Iglesias Feria Programación de juegos o videojuegos 7 Miércoles 02 Dic 2015 17:20 Ver último mensaje
El foro no contiene ningún mensaje nuevo

SQL Express 2005 Base de datos dañada necesita ...

ramonmerin Programación en general 0 Miércoles 28 Oct 2015 11:22 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Anuncio Curso Aprendiendo a Programar con MicroSoft

Tesis Programación Web en general 0 Miércoles 25 Mar 2015 11:34 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,