El Blog de Óscar Sotorrío Sánchez - MCP Application Development Foundation - C#

Todo lo que vaya aprendiendo de .NET, C#, ASP.NET, SQL Server, etc, lo compartiré con vosotros.

El autor:

Óscar Sotorrío Sánchez
Contacto Send mail

Encuéntralo

Álguien dijo...


Obtener información de internet es como intentar beber agua de una boca de incendios.

Mitchell Kapor

Cambiar el tamaño de una matriz.

El propósito de este código es mostrar cómo se cambia el tamaño de una matriz en C#.

Antes de seguir con el código, es necesario tener conocimientos previos sobre declaración e inicialización de matrices, así como de los métodos y propiedades de la clase Array. Aquí os dejo unos links de la documentación MSDN:

1- Declarar e inicializar matrices.

2- Utilizar Foreach en matrices.

3- Métodos y propiedades de la clase Array.

En realidad cambiar el tamaño de una matriz no tiene mucho misterio. Supongamos una matriz de tipo int llamada miMatriz:

int[] miMatriz = { 1, 2, 3 };

Supongamos ahora que queremos ampliarla en 4 elementos, es decir, conseguir una matriz de 7 elementos. Es muy sencillo:

miMatriz = new int[miMatriz.Length + 4];

Todo correcto. Ahora tenemos una matriz de tipo int llamada miMatriz que puede contener 7 elementos. Pero ahora vienen las preguntas:

¿Qué ha ocurrido con los datos de la matriz original { 1, 2, 3 }?.

¿La nueva matriz contiene los datos originales?.

La respuesta es que los datos originales { 1, 2, 3 } se han perdido al obtener una nueva matriz de 7 elementos “vacios”, es decir, la nueva matriz contiene { 0, 0, 0, 0, 0, 0, 0 }. Veámoslo en el código.

 

using System;
using 
System.Collections.Generic;
using 
System.Text;

namespace 
ConsoleApplication1
{
    
class Program
    {
        
static void Main(string[] args)
        {
            
// Declarar e inicilizar una matriz de tipo int
            
int[] miMatriz 12};

            
// Mostrar el contenido de MiMatriz
            
Console.WriteLine("Esta es miMatriz original...");
            foreach 
(int in miMatriz)
                Console.WriteLine(x)
;

            
Console.WriteLine();

            
// Ampliamos miMatriz y mostramos su contenido
            
miMatriz = new int[miMatriz.Length + 4];
            
Console.WriteLine("Esta es miMatriz ampliada...");
            foreach 
(int in miMatriz)
                Console.WriteLine(x)
;

            
Console.ReadLine();
        
}
    }
}

 

Como podemos observar los datos de la matriz se han perdido. ¿Qué debemos hacer para ampliar una matriz en C# sin perder los datos?. La única forma de conseguirlo es creando una copia de la matriz que queremos ampliar. Para clarificarlo sigamos estos 4 pasos:

PASO 1. Declarar e inicializar una matriz “de copia” con el mismo tamaño que la matriz original.

PASO 2. Copiar el contenido de la matriz original en la matriz “copia”.

PASO 3. Aumentar el tamaño de la matriz original.

PASO 4. Copiar el contenido de la matriz “copia” en la matriz original ya ampliada.

Veamos el código de estos 4 pasos.

 

class Program
    {
        
static void Main(string[] args)
        {

            
// Declarar e inicilizar una matriz de tipo int
            
int[] miMatriz 12};

            
// Mostrar el contenido de MiMatriz
            
Console.WriteLine("Esta es miMatriz original...");
            foreach 
(int in miMatriz)
                Console.WriteLine(x)
;

            
Console.WriteLine();

            
// PASO 1:
            // Declarar e inicializar una matriz llamada Micopia
            
int[] miCopia = new int[miMatriz.Length];

            
// PASO 2:
            // Copiar el contenido de miMatriz en miCopia
            
miMatriz.CopyTo(miCopia, 0);

            
// PASO 3:
            // Cambiar el tamaño de miMatriz (en este caso lo aumentamos en 4)
            
miMatriz = new int[miMatriz.Length + 4];

            
// PASO4:
            // Copiar el contenido de miCopia en miMatriz ya ampliada
            
miCopia.CopyTo(miMatriz, 0);

            
// Mostrar el contenido de miMatriz ampliada
            
Console.WriteLine("Esta es miMatriz ampliada...");
            foreach 
(int in miMatriz)
                Console.WriteLine(x)
;

            
Console.ReadLine();

        
}
    }
De esta forma obtenemos una matriz ampliada conservando los datos pero en definitiva este comportamiento es muy pobre. Es recomendable trabajar con ArrayList.

Tags:
Categories: Lenguajes
Posted by Oscar S.S. on viernes, 18 de enero de 2008 16:59
Permalink | Comentarios (0) | Post RSSRSS comment feed

Añadir comentario


 

  Country flag

biuquote
  • Comentario
  • Vista previa
Loading