none
Cambiar tamaño del array como ejemplo RRS feed

  • Pregunta

  • Buenas:

    using System;
    
    namespace Cambiar_tamaño_array_consola_02_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Tamaño del array";
    
                // Crea e inicializa una nueva matriz de cadenas.
                String[] miArray = {"Hola", "mi", "muy", "distinguido", "amigo",
                "¿Cómo", "estás", "por", "aquí?"};
    
                // Muestra los valores de la matriz.
                Console.WriteLine(
                    "La matriz de cadenas contiene inicialmente los siguientes valores:");
                MostrarIndicesYValores(miArray);
    
                // Cambiar el tamaño de la matriz a un tamaño más grande (cinco elementos más grandes).
                Array.Resize(ref miArray, miArray.Length + 5);
    
                // Muestra los valores de la matriz.
                Console.WriteLine("Después de cambiar el tamaño a un tamaño más grande,");
                Console.WriteLine("la matriz de cadenas contiene los siguientes valores:");
                MostrarIndicesYValores(miArray);
    
                // Cambiar el tamaño de la matriz a un tamaño más pequeño (cuatro elementos).
                Array.Resize(ref miArray, 4);
    
                // Muestra los valores de la matriz.
                Console.WriteLine("Después de cambiar el tamaño a un tamaño más pequeño,");
                Console.WriteLine("la matriz de cadenas contiene los siguientes valores:");
                MostrarIndicesYValores(miArray);
    
                // Pulse cualquier tecla para salir.
                Console.ReadKey();
            }
    
            public static void MostrarIndicesYValores(String[] miArray)
            {
                for (int i = 0; i < miArray.Length; i++)
                {
                    Console.WriteLine("   [{0}] : {1}", i, miArray[i]);
                }
                Console.WriteLine();
            }
        }
    }

    Quiero adaptar este código de C# en C++. No se si me dejará hacer este ejemplo en C++ nativo o win32 como se llamaba antes.

    Saludos.


    http://electronica-pic.blogspot.com



    • Editado Metaconta lunes, 27 de julio de 2020 14:02
    lunes, 27 de julio de 2020 12:50

Respuestas

  • En realidad el Array.Resize no cambia el tamaño del array. Lo que hace internamente es crear un nuevo array, copiar todos los elementos del array antiguo al nuevo, destruir el antiguo, y devolver el nuevo.

    Observa la sección "Remarks" en la documentación del método:

    https://docs.microsoft.com/en-us/dotnet/api/system.array.resize?view=netcore-3.1

    Desde luego, eso mismo lo puedes hacer e C++, es decir, nada te impide construir un nuevo array, usar un bucle que copie todos los elementos del antiguo al nuevo (o incluso un memncpy), destruir el array antiguo y quedarte con el nuevo, igual que hace internamente el Array.Resize de tu ejemplo en C#.

    • Marcado como respuesta Metaconta lunes, 27 de julio de 2020 21:10
    lunes, 27 de julio de 2020 18:11

Todas las respuestas

  • En realidad el Array.Resize no cambia el tamaño del array. Lo que hace internamente es crear un nuevo array, copiar todos los elementos del array antiguo al nuevo, destruir el antiguo, y devolver el nuevo.

    Observa la sección "Remarks" en la documentación del método:

    https://docs.microsoft.com/en-us/dotnet/api/system.array.resize?view=netcore-3.1

    Desde luego, eso mismo lo puedes hacer e C++, es decir, nada te impide construir un nuevo array, usar un bucle que copie todos los elementos del antiguo al nuevo (o incluso un memncpy), destruir el array antiguo y quedarte con el nuevo, igual que hace internamente el Array.Resize de tu ejemplo en C#.

    • Marcado como respuesta Metaconta lunes, 27 de julio de 2020 21:10
    lunes, 27 de julio de 2020 18:11
  • Hola,

     

    gracias por confirmar que encontraste una respuesta a tu pregunta. 

     

    Saludos cordiales

     

    Gabriel Castro

    martes, 28 de julio de 2020 12:57
  • Sí, hasta me dio tiemo para hacer un ejemplo más espectacular.

    using System;
    using System.Threading;
    
    namespace Cambiar_tamaño_array_consola_02_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Tamaño del array";
    
                // Residemensiona pantalla. X = 20, Y = 5.
                Console.SetWindowSize(68, 36); 
    
                // Crea e inicializa una nueva matriz de cadenas.
                string[] miArray = {"Hola", "mi", "muy", "distinguido", "amigo.", "¿Cómo", "estás", "por", "aquí?"};
                #region Página 1.
                // Muestra los valores de la matriz.
                Console.WriteLine(
                    "La matriz de cadenas contiene inicialmente los siguientes valores:");
                MostrarIndicesYValores(miArray);
    
                // Cambiar el tamaño de la matriz a un tamaño más grande (cinco elementos más grandes).
                Array.Resize(ref miArray, miArray.Length + 5);
    
                // Muestra los valores de la matriz.
                Console.WriteLine("Después de cambiar el tamaño a un tamaño más grande,");
                Console.WriteLine("la matriz de cadenas contiene los siguientes valores:");
                MostrarIndicesYValores(miArray);
    
                // Cambiar el tamaño de la matriz a un tamaño más pequeño (cuatro elementos).
                Array.Resize(ref miArray, 4);
    
                // Muestra los valores de la matriz.
                Console.WriteLine("Después de cambiar el tamaño a un tamaño más pequeño,");
                Console.WriteLine("la matriz de cadenas contiene los siguientes valores:");
                MostrarIndicesYValores(miArray);
                Console.Write("Página 1 / 4");
                #endregion
    
                #region Página 2.
                // Pulse cualquier tecla para continuar.
                Console.ReadKey();
    
                // Cambiar color de fondo gris.
                Console.BackgroundColor = ConsoleColor.Gray;
    
                // Letras negras.
                Console.ForegroundColor = ConsoleColor.Black;
    
                // Limpiar pantalla.
                Console.Clear();
    
                // Añado diez más del array que ya está por cuatro posiciones.
                Console.WriteLine("Vuelvo agrandar la matriz:");
                Array.Resize(ref miArray, miArray.Length + 10); // 10 posiciones más.
                MostrarIndicesYValores(miArray);
    
                Console.WriteLine("Añado SALUDOS y ÁRBOL en las direcciones indicadas.");
                Console.WriteLine("La matriz de cadenas contiene los siguientes valores:");
                miArray[10] = "SALUDOS";
                miArray[12] = "ÁRBOL";
                MostrarIndicesYValores(miArray);
                Console.Write("Página 2 / 4");
                #endregion
    
                #region Página 3.
                // Pulse cualquier tecla para continuar.
                Console.ReadKey();
    
                // Cambiar color de fondo verde.
                Console.BackgroundColor = ConsoleColor.Green;
    
                // Letras negras.
                Console.ForegroundColor = ConsoleColor.Black;
    
                // Limpiar pantalla.
                Console.Clear();
    
                Console.WriteLine("Pongo \"null\" a muy de la dirección [2]");
                Console.WriteLine("La matriz de cadenas contiene los siguientes valores:");
                miArray[2] = null;
                MostrarIndicesYValores(miArray);
    
                Console.WriteLine("Pongo \"string.Empty\" a muy de la dirección [12]");
                Console.WriteLine("La matriz de cadenas contiene los siguientes valores:");
                miArray[12] = string.Empty;
                MostrarIndicesYValores(miArray);
                Console.Write("Página 3 / 4");
                #endregion
    
                #region Página 4.
                // Pulse cualquier tecla para continuar.
                Console.ReadKey();
    
                // Cambiar color de fondo azul.
                Console.BackgroundColor = ConsoleColor.Blue;
    
                // Letras blancas.
                Console.ForegroundColor = ConsoleColor.White;
    
                // Limpiar pantalla.
                Console.Clear();
    
                // Cambiar el tamaño de la matriz a un tamaño más pequeño (cuatro elementos).
                Array.Resize(ref miArray, 4);
    
                Console.WriteLine("La matriz se borra completamente a parte de reducirlo a cuatro.");
                Console.WriteLine("La matriz de cadenas contiene los siguientes valores:");
                // Borrar contenido array.
                for (int i = 0; i < miArray.Length; i++)
                {
                    Console.WriteLine("   [{0}] : {1}", i, miArray[i] = null);
                }
    
                Console.WriteLine();
                Console.WriteLine("Añadiendo nuevos valores.");
                Console.WriteLine("La matriz de cadenas contiene los siguientes valores:");
                miArray[0] = "HASTA";
                miArray[1] = "LUEGO";
                miArray[2] = "COCODRILO";
                miArray[3] = ".";
                MostrarIndicesYValores(miArray);
    
                Console.WriteLine();
                Console.WriteLine("Textos en líneas.");
                
                for (int i = 0; i < miArray.Length; i++)
                {
                    Console.Write(miArray[i].ToString() + " ");
                }
    
                Console.WriteLine();
                Console.WriteLine();
                Console.Write("Página 4 / 4");
                #endregion
    
                // Pulse cualquier tecla para salir.
                Console.ReadKey();
            }
    
            public static void MostrarIndicesYValores(String[] miArray)
            {
                for (int i = 0; i < miArray.Length; i++)
                {
                    Console.WriteLine("   [{0}] : {1}", i, miArray[i]);
                    Thread.Sleep(50); // 0.05 segundos.
                }
                Console.WriteLine();
            }
        }
    }
    


    http://electronica-pic.blogspot.com

    miércoles, 29 de julio de 2020 0:31