Trabajando con arrays (vectores) en C#

Jun 22, 2008 Tutoriales C# 98 comentarios

En programación un array (muchos lo llaman vector) es una zona de almacenamiento que contiene elementos de un mismo tipo (enteros, boléanos, fechas). En principio todos las arrays son de una dimensión, pero se pueden simular facilmente arrays multidimensionales. Los más fáciles de “ver” o imaginar son los de dos (un tablero de ajedrez) y tres dimensiones (el cubo de Rugby).

Para que sirven los arrays?

Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible, por ejemplo, cuando tenemos un conjunto de números desordenados o una lista de nombres.

Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar otra estructura mejor diseñada para estas situaciones. En lenguajes fuertemente tipados como C# (aunque ya no tanto) los arrays solo pueden tener elementos de un mismo tipo, a diferencia de PHP, Python y otros lenguajes dinámicos. Veamos ahora como podemos trabajar con los arrays en C#.

Declarar un Array

Para declarar un array de una dimensión, solamente debes especificar de qué tipo serán los elementos de array, de esta forma:

 <tipo> [] <nombre>  = new <tipo> [<tamaño>];

Por ejemplo, si quiero crear un nuevo array de 8 números enteros:

int [] numeros = new int [8];

int es para decir que son enteros lo que voy a almacenar, numeros es el nombre del array y new es el operador que indica al compilador que cree un nuevo array con una capacidad de 8 elementos.

Si quieres establecer los 8 números enteros desde un principio, deberás incluir entre llaves, los elementos separados por coma como en el ejemplo:

int [] a = {6,1,5,6,4,8,6,9,7,4,14,26,14,12,10};

Para declarar un array n-dimensional solo hay que tener en cuenta que a medida que le agreguemos una coma (,) a los corchetes, se crea una nueva dimensión, por lo que si hacemos [,] estamos creando un array bidimensional, si agregamos otra coma ([,,]) sería tridimensional. Veamos un ejemplo:

bool [,] tablero = new bool[8,8];
//Se crea un array bidimensional llamado tablero de 8x8

Acceder a los elementos de un array

Para acceder a un elemento en una posición i solo hay que hacer mi_array[i] si tiene una dimensión, si tiene más de una dimensión, podemos hacer my_array[i,j] (noten que es diferente a C++). Veamos algunos ejemplos:

int [] elementos = new int[]{5,4,3,2,1};
int x = elementos[2];
Console.WriteLine(x); //Se imprime 3

Es importante saber que para referirse al elemento de la posición n del array, hay que escribirlo como my_array[n-1] ya que my_array[0] devuelve el primer elemento del array. Es un poco incómodo, pero con la práctica te acostumbras. Para acceder al último elemento

Algunos ejemplos

Ahora veremos algunos ejemplos, para que se familiaricen con la sintaxis y vean como usarlos en métodos y aplicaciones sencillas.

Ejemplo 1

Hagamos un método o función, que diga si un número entero está o no dentro de un array.

// Declaramos el método que recibe un array de enteros y
// devuelve un bool, en caso de encontrar el número en el
// array "numeros" devolveremos true;
public static bool Pertenece (int numero, int [] array)
{
    // Recorremos todas las posiciones del array desde
    // 0 hasta "array.Lenght", que nos da la longitud.
    for(int i=0; i<array.Length; i++)
    {
        // Preguntamos si el elemento en la posición i del array es igual al número que buscamos.
        if(array[i]==numero)
        // En caso de que encontremos el número devolvemos true.
             return true;
     }
    // Retornamos false si no está el número
    return false
}

Para probar este método podemos escribir algo así:

int [] numeros = {6,1,5,6,4,8,6,9,7,4,14,26};
bool dime= Pertenece(8, numeros);
Console.WriteLine(dime);

Esto imprimirá en la consola true, ya que 8 está en el array.

Ejemplo 2

Ahora se trata de un método que recibe un array de numeros enteros y devuelve un numero entero, que será el mayor de los elementos del array.

public static int Mayor(int[]numeros)
{
    // Primero asignamos al entero mayor el primer
    // elemento del array
    int mayor = numeros[0];
    //Ahora recorremos el array como en el ejemplo 1
    for(int i = 0 ; i< numeros.Length ; i++)
    // Vamos preguntando en cada posicion del array si el elemento que contiene es mayor que la variable "mayor".
    if(numeros[i] > mayor)
    // Si se cumple, entonces asignamos a mayor este nuevo elemento.
         mayor = numeros[i];
    // Cuando terminamos de recorrer el array, retornamos la variable mayor.
    return mayor;
}

Podríamos usar este método de la siguiente forma:

int [] numeros = {6,1,5,6,4,8,6,9,7,4,14,26};
int max = Mayor(numeros);
Console.WriteLine(max);

Bueno, hasta aquí este breve introducción sobre el manejo de arrays. Si quieres seguir aprendiendo, puedes ver unos cuantos ejecicios resueltos de array en C# que he ido publicando en este mismo blog. Si tienen alguna pregunta en los comentarios.

Compartir:

98 comentarios

Forma parte de nuestra discusión y síguela de cerca

Luego iré añadiendo algunos ejemplos a este tutorial. Igual pueden sugerir algunos ejercicios y le damos solución entre todos.

Autor: admin | Fecha: Jun 30, 2008.

[...] Arrays en C# (Para que veas bien que es un array) [...]

Autor: Ejercicios resueltos de C# (3ra. parte) | PuntoPeek.com | Fecha: May 12, 2009.

Me parece excelente este tutorial…Gracias!!”"”"

Autor: Dayan | Fecha: Ene 23, 2010.

Muy buena explicacion…

Autor: Stan | Fecha: Feb 11, 2010.

tengo que hacer un programa con una clase con 3 miembros
1. ingresar datos
2. suma datos ingresados
3. promedio de los datos ingresados.

no se como sumar los datos ingresados en un miembro distinto

Autor: juan | Fecha: Mar 1, 2010.

Arrays en C# http://bit.ly/crgtY9 #programacion #array #csharp via @addthis

Autor: Tommy J. | Fecha: May 6, 2010.

Hola, una preguntota un array podria utilizarse para determinar la paridad en una secuencia binaria? es decir si los numeros “1″ son pares que arroje “si es par” ??

Autor: Amy | Fecha: Ago 7, 2010.

Amy, perfectamente se podría usar un array para este problema, aunque en .Net hay una clase especialmente diseñada para trabajar con bits llamada BitArray. El código, de la forma más sencilla posible sería algo así:

bool Paridad (int [] secuencia)
{
     int cant = 0;
     for(int i=0; i&lt;secuencia.Length; i++)
         if(secuencia[i]==1)
              cant++;
     if(cant%2==0) //Si cant deja resto 0 con 2
           return true;
     else
           return false;       
}

Autor: Tommy | Fecha: Ago 13, 2010.

grandes maestros necesito de su ayuda soy nuevo en esto tengo los siguientes enunciados y desearia de su orientasion

1.- Ingresar 10 valores realez a un vector y calcule:

A.- El valor que mas se repita
B.- Indique los valores pares
C.- Indique los valores impares
D.- Indique los múltiplos de 2
E.- Indique los múltiplos de 5

2.- Dado un vector tamaño 10, calcule:

A.- El cuadrado de las posiciones impares
B.- El cubo de las posiciones impares

Autor: benjamin | Fecha: Ago 25, 2010.

muy interesante esta informacion .
cual es el promedio d 50 numeros ingresadosy a partir de este promedio mostrar cuales son los numeros mayores q el promedio.

Autor: mila | Fecha: Sep 18, 2010.

Como puedo hacer en consola una aplicación que yo le introduzca el numero de carnet y el me devuelva la fecha de nacimiento

Autor: Ayuda | Fecha: Sep 27, 2010.

[...] por si no sabes ni trabajar con arrays, debes leer esto Compartir:EmailImprimirCompartirRedditDiggPublicar [...]

Autor: Ejercicios resueltos de array con C# (1) | puntopeek | Fecha: Oct 1, 2010.

@Benjamin, @Mila. En el post de ejericios resueltos de array hay varios ejemplos y códigos para el promedio, calcular el máximo, el minimo, etc.

@Ayuda. Lo que debes hacer es un método para extraer el año, el día y el mes de un string. Lo único q debes saber para hacer este ejercicio, es usar ls funciones Substring() y int.Parse().

Saludos y feliz fin d año!

Autor: Tomy | Fecha: Dic 23, 2010.

necesito ayuda necesito desarrolar una cadena q tengan caracteres imprima el valro q se obtiene cada vez q se realiza una rotacion de un caracter a la derecha,hasta mostrar la palabra original :ej hola,ahol,laho,olah,hola

estoy trabajando en una pag web en visual c#…y no se si enviarlo a un label o q en en el texbox de realice me confunde este ejercicio….

Autor: joyaguapote | Fecha: Feb 28, 2011.

String myString = TextBox1 .Text ;

Label1.Text += myString+”,”;//aqui solo igualo el label a la palabra original
string caracter =myString .Substring(0,1);//agarro la primera letra
// de la cadena y la guardo en esta variable

myString =myString.Remove(0,1);//aqui le quito la primera letra
//para que en el for solo le vaia insertando la letra en el indice que le diga

for (int i = 0; i <= myString.Length; i++)//hasta que i sea menor = a el numero de caracteres
//que en este caso seria mystring pero sin la primera letra
{
string test1 = myString.Insert(myString .Length – i, caracter );
//usando el insert solo voi metiendo el caracter en el indice que le especifico
//que seria el length – 1 y a la par el caacter que le voi a poner en el indice
//al final solo mando a imprimir y lo voi concatenando con los anteriores
Label1.Text +=" " + Convert.ToString(test1 ) + " , ";
}

Autor: manuCust | Fecha: Mar 4, 2011.

Hola, alguien me podria decir como hacer una matriz y almacenar en un vector a parte los numeros mayores de cada fila de la matriz?
Gracias!

Autor: Vincenzo | Fecha: Mar 21, 2011.

Hola necesito ayuda por favor, tengo que sacar el promedio y la desviación estándar de una cantidad n de números reales, y la verdad la desviación estándar me mata, nose como hacerlo, a duras penas he escuchado que se usa creo sqrt() o algo así. Gracias.

Autor: Gustavo Delgado | Fecha: Mar 22, 2011.

@Vincenzo, sería algo así…

// Se crea un vector del tamaño de una de las filas 
// de la matriz
int [] vector = new int [matriz.GetLenght(0)];
//Recorremos cada fila de la matriz para quedarnos
//con el mayor de cada una
int mayor=Int32.Min;
for(int i=0; i<matriz.GetLenght(0); i++)
{
     mayor=Int32.Min;
     for(int j=0; j<matriz.GetLenght(1); j++)
     {
           if(matriz[i,j]>mayor)
                 mayor=matriz[i,j];
     }
     vector[i]=mayor;
}

No lo he probado, pero si hay algún error o algo que no se entienda me comentas

@Gustavo solo tienes que incluir el namespace Math en tu proyecto junto con las otras librerías como System.Collections de la siguiente forma:

using System.Math;

Autor: Tomy | Fecha: Mar 23, 2011.

como crear una cola circular con arreglos en c#
para dato numeicos???
GRaciAssss!!!!

Autor: lulu | Fecha: Abr 11, 2011.

Hola yo se que este tema trata de Arrays, pero la verdad tengo un problemilla y es que tengo que hacer un programa que al digitar un numero, muestre su respectivo numero en romano, el numero debe ser int, y estaba pensando en declarar 5 varibles (int unidades, int decenas, int centenas, int unidadesMil, int num = txtNumero.Text)y bueno hacer un switch case donde si es por ejemplo decimal sea int guardaDecimal(num/10) o algo asi pero en si no se como mostrar para cualquier numero, si me pudieran ayudar les agradeceria.

Autor: Gustavo Delgado | Fecha: Abr 14, 2011.

@Gustavo, hace un tiempo estuve leyendo sobre esto, pero al revés y lo encontré en Black Wasp, lo único que está en inglés, pero el código se entiende bien, te dejo el enlace:
Black Wasp
Saludos

Autor: Tomy | Fecha: May 6, 2011.

hola soy nuevo en esto y necesito crear un programa en java que trabaje con un arreglo de numeros enteros de longitud 7 y que eme permita ingresar los valores en cada posicion del arreglo. Luego crear un metodo que reciba como argumento el arreglo que se creo y que devuelva como resultado el numero mayor de todos los que posee el arreglo.

Autor: jeofre | Fecha: Jun 16, 2011.

@Jeofre, sería algo así el método que devuelve el mayor elemento de un array:

public int Mayor(int [] arreglo)
{
     int max=-1;
     for(int i=0; i<arreglo.lenght; i++)
     {
           if(max>arreglo[i])
          {
                max=a[i]
          }
     }
     return max;
}

Y añadir 7 elementos a un arreglo es muy sencillo:
declaras un array:

int [] elementos = {1,9,5,4,13,6,2};

y calculas el mayor elemento:

int mayor = Mayor(elementos);

Espero haberte ayudado.

Autor: Tomy | Fecha: Jun 17, 2011.

Quisiera saber mas acerca de los arrays ya que se algunas cosas pero quiero aprender más sobre ordenar numeros y esas cosas

Autor: adrian bahena | Fecha: Jun 23, 2011.

Gracias por la ayuda, pero segun como yo lo entiendo, lo que necesito es que el programa a traves de mensajes me pida ingresar cada uno de los siete elementos del arreglo en cada una de la posiciones. Espero me puedan ayudar…

Autor: Jeofre | Fecha: Jun 23, 2011.

Jeofre, yo nunca he trabajado con aplicaciones de Consola en Java, pero he encontrado algunos ejemplos, y no debe ser muy complicado, pero si es un poco distinto a como se trabaja con la consola en C#. Mira este link:
http://www.programacionfacil.com/java:aplicacion_consola_continuacion

Autor: Tomy | Fecha: Jun 24, 2011.

Hola como estan, tengo un problemita y no se como resolverlo, espero me ayuden:
Necesito elaborar un programa en Java que mediante la aplicación de métodos permita calcular la sumatoria de la siguiente sucesión numérica.
S= -3!+5!-7!+11!-13!+17!-19!+23!- …

Autor: @Dcarlos | Fecha: Jul 6, 2011.

@DCarlos, no se si te has dado cuenta que esa es una sucesión de números primos… la idea seguramente es que programes varios métodos para resolver este problema. Los métodos o funciones que tienes que programar son NextPrimo(int n) que devuelve el proximo primo a partir de n y Factorial(int n) que devuelve el factorial de un número n.
Te voy a dar un pseudocódigo, para que tengas una idea de lo que tienes que hacer:

//El parámetro indica los n primeros elementos de la sumatoria.
long SucesionFactPrimos(long n)
{
     long result=-3;
     int primo=3;
     for(int i=0;i<n; i++)
     {
        primo = NextPrimo(primo+1) //Método que calcula el proximo primo
        long k = Factorial(primo); //metodo que calcula el factorial de un número
        if i divisible por 2
            then result = result - k
       else
           result = result + k
     }
}

Por supuesto, esto no es nada eficiente, ya que se repiten muchas operaciones y para un n suficientemente grande el programa puede que se bloquee o tarde bastante en responder, ya que por ejemplo, factorial de 4 es 24 y factorial de 32 es 263130836933693530167218012160…

Autor: Tomy | Fecha: Jul 9, 2011.

Gracias, me encanta su pagina, pero como hallar los impares de una matriz y luego mostrarlos en un arreglo ordenado de menor a mayor

Autor: ana | Fecha: Ago 2, 2011.

@ana, un número es impar si no es divisible por 2, luego podemos hacer algo así creando un método:

    int [] ImparesOrdenados(int [] numeros)
   {
       List<int> impares = new List<int>();
       for(int i=0; i<numeros.Lenght; i++)
       {
            if(numeros[i]%2!=0)
                 impares.Add(numeros[i]);
       }
        impares.Sort();
        return impares.ToArray();
   }

Autor: Tomy | Fecha: Ago 2, 2011.

Gracias, pero no se ve muy bien, no aparace completo :S

Autor: ana | Fecha: Ago 6, 2011.

Para mi es un excelente tutorial, felicidades! Tienen mi admiración

Autor: WARRIORW | Fecha: Ago 24, 2011.

Cómo podría hacer un ejercicio con 2 arreglos ingresando un nombre y una fecha de nacimiento que devuelva el nombre y la edad expresada en años, meses y días… xfa una ayudita si!! muchas gracias…

Autor: Carlos Zuniga | Fecha: Sep 2, 2011.

Como podría hacer la unión, intersección y diferencia simétrica de conjuntos..ayudame porfa :)

Autor: ana | Fecha: Sep 4, 2011.

necesito un programa que me permita remplazar un valor en un vector dado e insertar en posiciones como inicio fin mitad.. gracias si me podrian colaborar es que estoy un poco confundido.

Autor: omar | Fecha: Sep 6, 2011.

@omar, ese ejercicio ya está hecho en este post. Solo debes tener en cuenta que para insertar en el inicio, index = vector[0], para insertar al final, index= vector[vector.Length-1] y para insertar en el medio, index = vector[vector.Length-1/2]

Autor: Tomy | Fecha: Sep 8, 2011.

Hola tengo que crear un programa que:
- Preguntar al usuario 5 números,
- Guárdalos en un array y
- Muéstralos en orden inverso.
Sin usar ningún tipo de bucle.
Y usando u bucle.
¿como guardo los 5 numeros que me dara el usuario en un array?
Gracias

Autor: Eva | Fecha: Nov 12, 2011.

hola buenos dias alguien me podria desir como puedo aser un codigo que quite las ocurrencias en un vector? gracias

Autor: Gustavo | Fecha: Nov 14, 2011.

Hola… que pena contigo molestarte, pero estoy iniciando en esto de la programación, y ando medio perdida con esto de los arreglos.
como creo un vector de 5 posiciones y ordeno de menor a mayor??
yo hice el pseudocódigo, pero no sé, me “enredo” probandolo… me puedes hechar una manita indicándome si está bien??

INICIO
declaro variables..
ciclo para (i=1, i<5,1)
vect[i]= "Ingrese número"
ciclo para (j=0, j<5-1,1_)
si(vector[j]<vector[j+1])
aux=vector [j]
vector[j]=vector[j+1]
vector[j+1]=aux
fin si
fin para
fin para
FIN

Autor: leydy M. | Fecha: Ene 15, 2012.

EL pseudocódigo está bastante bien, solo ten en cuenta hacer el for correctamente:
for( i=0; i<5; i++) //los arrays empiezan en 0
Puedes ver un post que escribí hace un tiempo sobre el algoritmo de ordenación por burbuja, que es justamente lo que buscas:
http://www.puntopeek.com/codigos-c/ordenacion-por-burbuja-en-c/

Autor: Tomy | Fecha: Ene 19, 2012.

Quisiera saber como hacer un programa donde el usuario digite un numero y este programa me revise cuantos números pares hay dentro de este y me los sume.

Autor: carlos | Fecha: Ene 25, 2012.

Como hacer un programa que digite numeros y me los muestre en un vector aleatoriamente en c#

Autor: carlos | Fecha: Ene 25, 2012.

@Carlos, no estoy seguro de entender tu pregunta… tu lo que buscas es descomponer el número dado en números pares??? Porque lo que entendí que quieres hacer es bastante sencillo, por ejemplo: para n=23, tenemos que hay 23/2 números pares y la suma de los primeros 23/2 numeros pares (2+4+6+8+…+22) es (n/2)(n/2+1).

Autor: Tomy | Fecha: Ene 25, 2012.

@Carlos: Hace un tiempo escribí un post sobre esto:
Generar números rándom con C#

Autor: Tomy | Fecha: Ene 25, 2012.

hola necesito ayuda con este ejercicio quein me colabora
El dueño de una cadena de tiendas de artículos deportivos desea controlar sus ventas. Los datos de entrada son:
• El nombre de la tienda
• Nombre del deporte del artículo.
• El costo del artículo.
Hacer una aplicación que permita calcular:
• Las ventas totales en el día para cada tienda
• Las ventas totales para cada uno de los deportes.
• Las ventas totales de todas las tiendas.

Autor: juan | Fecha: Ene 27, 2012.

Muchas gracias Tommy! Me ha servido tu aporte

Autor: carlos | Fecha: Feb 6, 2012.

Ademas de felicitarte porque se te entiende lo que enseñas
te quiero preguntar como desordenar en forma aleatoria las posiciones de los elementos de un vector cuyos elementos son predefinidos y uno de ellos es un cero por ejemplo; luego de des-ordenarlos hallar la posición del elemento cero.
muchas gracias por tu ayuda y enseñanza

Autor: antonio | Fecha: Feb 14, 2012.

hola me encargaron un arreglo de 15 carácteres (en ves de int char)y contar cuantas son vocales y cuantas consonantes

porfa ayudame con la codificación

Autor: isa | Fecha: Mar 17, 2012.

que tal una cuestion como puedo declarar un arreglo de dos dimenciones un un DataGridViewRow

gracias

Autor: LUIS ENRIQUE GOMEZ GONZALEZ | Fecha: Abr 4, 2012.

Duda existencial… no entendí porqué en el primer ejemplo imprime el número 3

Autor: Elo :/ | Fecha: Abr 19, 2012.

Escribe tu comentario

Requerido.

Requerido. No público.

Si tienes alguno.