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

Quisiera una ayuda con un problema:

using System;
namespace semana9_array
{
class prueba
{

static int[] nota = new int[5]; //Crea un array de 5

static void Main(string[] args)
{
ingresar();
Mostrar1();
Mostrar2();
Console.ReadKey();
}
static void ingresar() //Clase ingresar
{

for (int i = 0; i < nota.Length; i++)
{
Console.Write("ingrese nota: ");
nota[i] = int.Parse(Console.ReadLine());
}
}

static void Mostrar1() //Clase mostrar
{

for (int i = 0; i = 0; i–)
{
Console.WriteLine(“nota {0}”, nota[i]);
}

}

}
}

Autor: Eduardo | Fecha: Abr 29, 2012.

OK, en donde necesitas ayuda

Autor: Tomy | Fecha: May 2, 2012.

Tengo una consulta… los valores de las variables de un método, se pueden almacenar en un vector que está en otra clase??
La clase (Jugador)

public void pagarapuesta()
        {
             int[] jugadas = new int[100];
            Console.WriteLine("Su saldo inicial es de 100$:", +saldo);
            for (int i = 0; i <= jugadas.Length; i++)
            {
                Jugada j = new Jugada();
                jugadas[i] = ??????? 
            }

La clase (Jugada)

//Clase en donde se encuentran las variables, con los valores.
public void hacerjugada()
{
      Console.WriteLine("Realize sus apuestas, suerte!");
      Console.WriteLine("Apueste el número que desea:");
      valor = Convert.ToInt32(Console.ReadLine());
      tipo = 0;
      Console.WriteLine("Cuánto desea apostar? (en números)");
      cantidad = Convert.ToInt32(Console.ReadLine());
 
      Console.WriteLine("Desea seguir apostando? La siguiente apuesta será de Colores (Rojo/Negro),  s/n");
      string respuesta = Convert.ToString(Console.ReadLine());
      if (respuesta == "s")
            {
                Console.WriteLine"Qué color desea apostar? rojo/negro?");
                valor = Convert.ToInt32(Console.ReadLine());
                tipo = 1;
                Console.WriteLine("Cuánto desea apostar? (en numeros)");
                cantidad = Convert.ToInt32(Console.ReadLine());
            }
            else if (respuesta == "n")
                {
                    Console.ReadLine();
                }

Por ejemplo algo que sea asi: jugadas [i] = (tipo, valor, cantidad)
algo así, entonces para que en la posición uno del vector se almacenes los valores de tipo, valor y cantidad…

Hoy a la tarde, las 18hs, entrego el trabajo y esa es la única tranca ya que no se me ocurre otra idea… =/

Autor: Marcelo | Fecha: May 27, 2012.

No estoy seguro de entender la pregunta, pero parece que tienes un problema con el diseño de la aplicación, te aconsejo que leas sobre la programación orientada a objetos y veas algunos ejemplos ;) Pero la respuesta a tu pregunta es no! las variables de los métodos son privadas, Lo que debes hacer es que el método que contiene las variables no sea void, o sea, que retorne alguna estructura o puede retornar el tipo Jugada, que en el constructor de dicha clase se le pase el tipo, valor y la cantidad que apostó.
Saludos y suerte

Autor: Tomy | Fecha: May 28, 2012.

Muchas gracias por la respuesta.
Lo que hicimos al final fue meter casi todo en una clase, y en vez de vector, usamos variables individuales.
Es todo un tema esto de los juegos de casino ;)
Saludos

Autor: Marcelo | Fecha: May 28, 2012.

esta pagina es importante para los estudiante de programacion

Autor: manolo fermin | Fecha: Oct 11, 2012.

Pues si manolo, este blog está especialmente pensado para los estudiantes que como yo, quieren aprender o mejorar sus habilidades de programación, sobre todo en C#

Autor: Tomy | Fecha: Oct 22, 2012.

hola amigo gran pagina yo estudio ing.sistemas de informacion y estoy viendo c# en vectores la verdad es un poco complicado de entender y mas que nada te queria preguntar si sabes de algun libro que me ayude a entenderlo mejor si me puedes mandar el enlace mejor..
bueno espero y me puedas ayudar .. suerte :)

Autor: jorge luis | Fecha: Dic 4, 2012.

Hay un detalle más: Los Arrays en .Net heredan de IEnumerable, lo que significa que también podemos usar Linq con ellos y aplicarles Select, Distinct, OrderBy, etc.

Autor: Yelinna | Fecha: Ene 16, 2013.

@Yelinna, gracias por el aporte, aunque al momento de escribir este tuto, Linq era solo una librería :D

Autor: Tomy | Fecha: Feb 4, 2013.

Cual es la forma correcta de hacer una función que reciba como parámetros tres arreglos de tamaños N , M y (N+M) respectivamente. Los primeros dos están ordenados de forma ascendente y el programa debe retornar la unión de los arreglos (N y M) en un tercer arreglo(N+M).

La carga se debe realizar en forma ordenada. No es valido cargar los dos arreglos por separado y después ordenarlos.
Se supone que ambos arreglos (N y M) están completos y que no hay basura en ninguna posición.

Autor: Lucia | Fecha: Feb 20, 2013.

Azu… realmente buenazo amigo, si te tuviera en mi lado te apapacho :3 gracias realmente eres una gran ayuda a la sociedad, gente como tu deben vivir para siempre!!! FELICIDADES!!!

Autor: Roy | Fecha: Abr 11, 2013.

jaja… gracias @Roy, para eso estamos, para ayudarnos, si tienes alguna duda vuelve cuando quieras

Autor: Tomy | Fecha: Abr 17, 2013.

exelente muchas gracias me sirvio mucho

Autor: Santiago | Fecha: Abr 23, 2013.

Quisiera recibir una ayuda de como…Devolver el índice (o posición) del mayor entero .
Dicho ejercicio me pide lo antes mencionado para un arreglo de 10 numeros enteros…
Espero su respuesta..

(TODO EN C#).

Autor: nicolas.dld87 | Fecha: May 1, 2013.

Buenas, antes que nada gracias por compartir tus conocimientos y poder facilitarnos los medios para el entendimiento, de vrd. nos es muy útil.
Quisiera hacer una consulta, podemos usar un objeto como tipo de dato para un array, y si es así como se utiliza.
Desde ya, gracias

Autor: Maria | Fecha: May 12, 2013.

yo = soy estudiante de ing. en sistemass y quisiera ayuda necesito algunos ejemplos con arreglos en c#

Autor: roman | Fecha: Sep 12, 2013.

Si les es posible quisiera algún tip, para llenar un arreglo de vectores con la forma [punto][posx , posy] pero no atino cómo debo pasar el dato al arreglo desde un bucle:

double[][,] descriptores;
for (i = 0; i < alto; i++) {
haarray[i] = tmpData[i+1]/1.414214;
aux = haarray[i]; auxl = haarray[l + 1];
descriptores[i][0,1] = {{aux, auxl}};
}

la matriz "descriptores" no puedo llenarla aún use corchetes, llaves, paréntesis, lo que sea me marca error. Casi no encuentro ejemplos de llenado de matrices por bucle. Alguien me puede ayudar?
De antemano muchas gracias!

Autor: Toñotron | Fecha: Oct 9, 2013.

Hola Tengo un proyectoel que consiste en realizar un juego tipo Candy crush solo que mas sencillo al juntar tres elementos del mismo tipo desaparecen dentro de este juego hay elementos especiales los cuales hay que lograr ir bajando de manera que estos comienzan en alguna línea y hay que ir juntando tres figuras iguales para ir desapareciendo líneas y que estos puedan bajar y no se como empezar me gustaría saber si alguien puede ayudarme

Autor: javier castillo | Fecha: Oct 14, 2013.

cuadro especieal ciculo triangulo
cuadro cuadro circulo triangulo circulo circulo

si intercambiamos el triangulo por el circulo en la segunda línea deben desaparecer y de esta manera iran bajando los elementos especiales debe tener un contador de movimientos uno de cuantas veces el especial llega ala ultima línea

Autor: javier castillo | Fecha: Oct 14, 2013.

me pueden ayudar con este problema xfa esque necesito llenar un vector de 20 elementos imprimir la posicion y el valor mayor almacenado en el vector..
suponiendo que todos los elementos del vector son diferentes. en visual c#

Autor: otilia duran | Fecha: Oct 22, 2013.

@nicolas.dld87: Puedes usar algo como:

int[] anArray = { 1, 5, 2, 7 };
// buscando el máximo
int m = anArray.Max();
// Index del máximo
int p = Array.IndexOf(anArray, m);

@Maria: Por supuesto, supongamos que ya está creada la clase Persona, para crear un array de personas, simplemente sería algo como:

Persona [] personas = new Persona[100];
//añadiendo una persona
personas[0] = new Persona ("Maria", "25 años");
//Accediendo a una persona
Persona maria = personas[0];

Autor: Tomy | Fecha: Oct 23, 2013.

Hola! Estoy en primer año de Ingeniería Mecánica. En este semestre tengo Introducción a la Programación y mi proyecto final es hacer un juego tipo Candy Crush en C#. No tengo completa la idea de cómo hacerlo, sé que es con matrices pero no sé cómo puedo “hacer” el efecto de intercambiar los dulces, si se juntan tres iguales eliminarlos y que luego en random bajen más dulces, entre otras dudas… ¿Hay alguien que me pueda y quiera ayudar?

Autor: Camille | Fecha: Oct 28, 2013.

estoy haciendo un ejercicio q lee los nombres y promedios de n estudiantes c guardan en arreglos quisiera saber cmo mandar a imprimir el nombre del mejor estudiante y su promedio???

Autor: juerghens | Fecha: Nov 7, 2013.

@juerghens: La idea es:
1. Declarar un estudiante auxiliar, para ir comparando.
2. Recorrer el array buscando el mejor estudiante, comparando los promedios
3. Después que recorras todo el array ya tendrás el estudiante (nombre y promedio)

No se como se guardan los estudiantes en el array, pero supongamos que tienes una clase Estudiante ya implementada. Entonces:

Estudiante [] estudiantes = new Estudiante []{//aqui estan los estudiantes};
//Supongo que el mejor es el primero
var mejor = estudiantes[0];
//Recorremos los estudiantes
for(int i=0; i<estudiantes.Length; i++)
    //Si el promedio del estudiante i es mejor que el que tenemos
    if(mejor.Promedio<estudiantes[i].Promedio)
        //Hay un mejor estudiante
        mejor = estudiantes[i];
 
Console.WriteLine("Mejor Estudiante: {0}:{1}";, mejor.Nombre, mejor.Promedio);

Autor: Tomy | Fecha: Nov 8, 2013.

@Camille, yo estuve en esa misma situación cuando estaba en primer año, pero haciendo el juego Sudoku… recuerdo que no tenía idea de como empezar.

Por supuesto no tengo ni tiempo ni sería muy buena idea que te ayudara con el código, pero esto es lo que necesitas estudiar, estoy seguro que después de leer unos cuantos tutoriales y artículos vas a ir armando la idea de lo que quieres. Estoy seguro que si logras hacerlo todo sola, vas a tener una noción bastante completa de lo que es hacer una aplicación en C#
1. Tienes que aprender como dibujar/borrar y repintar rayas y circulos dinámicamente.
2. Tienes que saber como crear clases, propiedades, métodos, en este caso necesitarás una clase Tablero y otra Candy(cada circulito, con color, posición, etc)
3. Tienes que leer sobre eventos y delegados para dispararlos cuando hay al menos 3 iguales, como dibujar cuando el usuario hace click tomando la posición del mouse, etc.
4. Tienes que saber sobre la clase Random, aquí hay un post sobre eso, y como usarla.
5. Tienes que saber como usar los controles y Windows Form.

Ahí tienes mas o menos una guía de lo que necesitas saber, te aconsejo que practiques primero, y lo hagas por partes. Organiza bien las clases y trata de no repertir mucho código. Suerte! :)

Autor: Tomy | Fecha: Nov 8, 2013.

Hola, una pregunta??? necesito el codigo en C# consola
de este problema:

Como puedo mostrar los digitos de manera ascendente de un numero introducido por el usuario:

ejemplo: el usuario introduce = 5931

la repuesta deberia ser: 1359 o se de forma ascendetente

Autor: Fernando | Fecha: Feb 15, 2014.

ayuda denme ejemplo de programa en c Sharp con array :Enfermedades Se insertan una serie de síntomas y se deberá dar el medicamento más apropiado para el tratamiento
de 5 enfermedades.

Autor: araceli | Fecha: Mar 4, 2014.

como se podria hacer un array en formas que saque el cuadrado en un listbox ?

Autor: lizeth | Fecha: Abr 4, 2014.

¿como puedo cambiar el indice de un array?
Necesito un aarray de enteros con caracteres (letras mayusculas) de indice.

Autor: juan | Fecha: Abr 15, 2014.

necesito ayuda con un progra en asp en visual c# q el usuario ingrese 5 notas nos muestre el mayor el menor y el promedio de la 5 notas

Autor: juan carlo calderon | Fecha: May 14, 2014.

Quisiera que me ayuden con la siguiente informacion, tengo un login de usuario en vusual studio C# validando los datos con una tabla en sqlserver y me piden contar el numero de veces que un usuario accede a la aplicacion

Autor: Jimy Diaz | Fecha: Jun 1, 2014.

hola necesito una ayuda amm como puedo hacer un manual de vectores con el programa Ready to Program IDE con la aplicacion de colas graficas porfavor una ayuda..!!! :(

Autor: Flakita | Fecha: Jul 2, 2014.

Gracias por este tema, se aclaró mucho acerca del manejo de los vectores, cosas que usaba pero

Autor: adrian | Fecha: Jul 27, 2014.

Gracias amigo por este aporte, me aclaró mucho sobre este tema.. recien inicio en el mundo de la programacion, suerte bendiciones.

Autor: adrian | Fecha: Jul 27, 2014.

Hola Buenas Tardes
soy estudiante de sistemas
y estamos programando en C#.NET
y estamos viendo Arrays se me ha hecho muy complicado entenderlo.
necesito ayuda con un trabajo nos dan un array con unos valores y debemos hacer que el programa nos de el numero mayor y el menor.

Alguien podría ayudarme.

GRACIAS

Autor: Laura Sarmiento | Fecha: Ago 23, 2014.

hola una pregunta yo tengo que hacer el juego simon dice el cual tengo que imitar la secuencia de luces del simon el problema es que aun no nos enseñaron vectores y queria saber si para armar el simon es necesario usar dichos vectores muchas gracias

Autor: fran | Fecha: Oct 28, 2014.

ayuda se podra ingresar en un vector numeros y letras ayuda pliz

Autor: jonny | Fecha: Mar 15, 2015.

gracias por la ayuda nicolas me a servido de mucho…

Autor: gaby | Fecha: Abr 8, 2015.

Hola Saludos
Estoy creando un bingo y necesito saber como crear numeros aleatorios sin repetir y que este me salga en un textBox y cuando el numero que me de sea igual a otro numero tambien aleatorio en tro textbox Se elimine.
por favor una ayuda e buscado mucho y nada me resulta

Autor: luis Gomez | Fecha: Jun 23, 2015.

una consult amigo me podrias ayudar con un ejercicio q no tengo idea porfavor
1.-dado un vector con n elementos numericos enteros ya almacenados, indique cuantos de ellos son múltiplos de 3
gracias de atemano

Autor: alex | Fecha: Jul 7, 2015.

ola buenas noche a todos quisiera saber si me podrian ayudar con un ejercicio que tengo el cual es “llenar un arreglo con nombres de personas y preguntar al usuario cuantos datos desea ingresar” es en netbeans
por si podrian ayudarme ya que apenas estoy viendo este tema de los arreglos en java

Autor: Jose Birrueta Castro | Fecha: Dic 2, 2015.

Necesito ayuda con este problema es que no se como hacer que el arreglo imprima los elementos debajo del promedio les dejo el codigo porfa si me pueden ayudar

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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] cal = new int[12];
double prom = 0;
int sum = 0;

Console.WriteLine(“ejercicio”);

for (int i = 0; i < cal.Length; i++)
{
Console.WriteLine("escribe la cantidad de toneladas mensuales vendidas");
cal[1] = int.Parse(Console.ReadLine());

sum = sum + cal[i];

}
prom = sum / 12;
Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++");
Console.WriteLine("las cosechas superiores al promedio son: ");
Console.WriteLine("las cosechas menores al promedio son: ");
for (int i = 0; i prom)
{
Console.WriteLine(“el promedio de toneladas vendidas son: ” + prom);
Console.WriteLine(“” + cal[i]);
Console.WriteLine(“” + cal[i]);
}
}

Console.ReadLine();
}
}
}

Autor: Artemio | Fecha: Dic 10, 2015.

un favor amigo necesito generar un arreglo aleatorio pero con clases solamente con numeros del 0 al 9, por fvor necesito ayuda gracias este es mi codigo:
class CGenerarAleatorios
{
private int[] mArray = new int[10];
Random rnd = new Random();

public CGenerarAleatorios()
{
inicialize();
}

public void inicialize()
{
for (int i = 0; i < mArray.Length; i++)
{
mArray[i] = -1;
}
}

public void GenerarData(ListBox lstAleatorios)
{
int i;
for (i = 0; i <= mArray.Length; i++)
{
mArray[i] = rnd.Next(0, 9); // aqui sale error
lstAleatorios.Items.Add(mArray[i].ToString());
}

}
}

Autor: cristian | Fecha: Ene 5, 2016.

Hola Tomy.
Tengo una muy importante pregunta:
Qué son Pilas, Colas y Listas ? Es el mismo vector, o son algo parecido pero se declaran de otra manera?

Y otra cosa, qué es colecciones?

Talvéz mi pregunta sea tonta, pero es que el título de mi tema dice “Vectores y Colecciones” y hasta ahora vimos vectores unidimencionales.
Para que yo tenga una idea, puedes darme ejemplo de declarar a cada una de esas pilas, colas, listas y colecciones?

Gracias.

Autor: Daniel | Fecha: Abr 17, 2016.

hola alguien sabe como se hace un programa de c# que pida una palabra y despues letra por letra baje hasta la ultima linea y se forme la palabra

Autor: guillermo | Fecha: Oct 7, 2016.

hola necesito ayida con este programa em consola en c# .

el programa dice:

mostrar los elementos de indice par en un array de 10 elementos

Autor: cristian | Fecha: Oct 20, 2016.

me pueden ayudar con este arreglo en c#
Cargar un vector de 11 elementos que contendrá los pesos(kg) de cada jugador.

Se desea saber:

a) Cantidad de jugadores con peso entre 30 y 35 Kg inclusive.

b) Cantidad de jugadores con peso mayor a 40 kg.

d) Promedio de peso de los jugadores del equipo

Autor: alberto | Fecha: Nov 18, 2016.

Escribe tu comentario

Requerido.

Requerido. No público.

Si tienes alguno.