elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [C#] Array de una clase. Aumentar dimensiones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C#] Array de una clase. Aumentar dimensiones  (Leído 2,546 veces)
Sr Limone

Desconectado Desconectado

Mensajes: 5


Ver Perfil
[C#] Array de una clase. Aumentar dimensiones
« en: 31 Agosto 2015, 00:21 am »

Hola! Justo me acabo de registrar en este foro por que no encuentro solución a este pequeño problema. Espero y me puedan ayudar jeje.

Supongamos que tengo una clase llamada Persona y hago un array de la misma, es decir, algo así como:


Código
  1. Persona[] personas = new[50] Persona();

¿Cómo hago para que este array aumente sus dimensiones conforme lo valla requiriendo?
Espero haberme explicado y que me puedan ayudar. Muchas gracias :)


En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: [C#] Array de una clase. Aumentar dimensiones
« Respuesta #1 en: 31 Agosto 2015, 01:26 am »

Bienvenido a la comunidad Sr Limone.

Supongo que estarás aprendiendo programación. Cuando instancias un array con un tamaño fijo y se te queda pequeño debes de redimensionarlo haciendo uno más grande y copiando el contenido del viejo al nuevo.

En .NET como bien sabrás estas cosillas no las tienes que implementar o programar, bastaría con utilizar la clase ArrayList, la cual subyacente o por debajo hace el redimensionamiento al quedarse sin espacio o bien, con llamar al método Array.Resize() conseguirías el mismo resultado.

Saludos.


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: [C#] Array de una clase. Aumentar dimensiones
« Respuesta #2 en: 31 Agosto 2015, 11:31 am »

Aparte de lo ya mencionado, también podrías usar una colección genérica de tipo List<T>, al igual que un ArrayList pero con miembros más productivos, hace uso de un buffer de arrays para almacenar los datos, los cuales son redimensionados dinámicamente (internamente) utilizando los métodos List.Add() y List.Remove() (entre otros).

Código
  1. List<persona> personas = new List<persona>();
  2. personas.Add(persona individual);
  3. personas.AddRange(array de persona);

ArrayList, List<T>, ambas maneras son más productivas que utilizar un Array nativo.

No existe manera de redimensionar dinámicamente un Array, para redimensionar el tamaño de asignación debes usar Array.Resize cómo ya han comentado, aunque una manera más óptima en cuestión de velocidad sería copiar el contenido del antiguo array a uno nuevo:

Código
  1. Public Shared Function ResizeArray(sourceArray As Array, newSize As Integer) As Array
  2.  
  3.    Dim preserveLength As Integer = Math.Min(sourceArray.Length, newSize)
  4.  
  5.    If (preserveLength > 0) Then
  6.        Dim newArray As Array = Array.CreateInstance(sourceArray.GetType.GetElementType, newSize)
  7.        Array.Copy(sourceArray, newArray, preserveLength)
  8.        Return newArray
  9.  
  10.    Else
  11.        Return sourceArray
  12.  
  13.    End If
  14.  
  15. End Function

Código
  1. Dim myArray(50) As Integer
  2. Debug.WriteLine(String.Format("{0,-12}: {1}", "Initial Size", myArray.Length))
  3.  
  4. myArray = DirectCast(ResizeArray(myArray, myArray.Length + 50), Integer())
  5. Debug.WriteLine(String.Format("{0,-12}: {1}", "New Size", myArray.Length))

Conversión online a C#:

Código
  1. public static Array ResizeArray(Array sourceArray, int newSize)
  2. {
  3.  
  4. int preserveLength = Math.Min(sourceArray.Length, newSize);
  5.  
  6. if ((preserveLength > 0)) {
  7. Array newArray = Array.CreateInstance(sourceArray.GetType.GetElementType, newSize);
  8. Array.Copy(sourceArray, newArray, preserveLength);
  9. return newArray;
  10.  
  11. } else {
  12. return sourceArray;
  13.  
  14. }
  15.  
  16. }
  17.  
  18. //=======================================================
  19. //Service provided by Telerik (www.telerik.com)
  20. //=======================================================

Código
  1. int[] myArray = new int[51];
  2. Debug.WriteLine(string.Format("{0,-12}: {1}", "Initial Size", myArray.Length));
  3.  
  4. myArray = (int[])ResizeArray(myArray, myArray.Length + 50);
  5. Debug.WriteLine(string.Format("{0,-12}: {1}", "New Size", myArray.Length));

Saludos
« Última modificación: 31 Agosto 2015, 11:39 am por Eleкtro » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines