Tamaño de matriz (longitud) en C #


98

¿Cómo puedo determinar el tamaño de una matriz (longitud / número de elementos) en C #?


1
@Marcelo: ... pero todavía no puede responder preguntas realmente simples como "¿Dónde están mis lentes?" ;)
Guffa

2
¿Qué quieres decir con "tamaño"? ¿El número de elementos o el tamaño en bytes?
Fredrik Mörk

2
@fearofawhackplanet voté a favor porque tuve el mismo problema de encontrar Length no funcionó para matrices multidimensionales y, como resultado de esta pregunta, descubrí Rank y GetLength (índice).
TheMathemagician

1
@fearofawhackplanet Creo que el hecho de que tenga 145.000 visitas es un testimonio de su relevancia. Voto a favor.
brycejl

Respuestas:


152

Si es una matriz unidimensional a,

a.Length

dará el número de elementos de a.

Si bes una matriz rectangular multidimensional (por ejemplo, int[,] b = new int[3, 5];)

b.Rank

dará el número de dimensiones (2) y

b.GetLength(dimensionIndex)

obtendrá la longitud de cualquier dimensión dada (indexación basada en 0 para las dimensiones, por lo que b.GetLength(0)es 3 y b.GetLength(1)es 5).

Consulte la documentación de System.Array para obtener más información.

Como @Lucero señala en los comentarios, existe el concepto de una "matriz dentada", que en realidad no es más que una matriz unidimensional de matrices (típicamente unidimensionales).

Por ejemplo, uno podría tener lo siguiente:

int[][] c = new int[3][];
c[0] = new int[] {1, 2, 3};
c[1] = new int[] {3, 14};
c[2] = new int[] {1, 1, 2, 3, 5, 8, 13};

Tenga en cuenta que los 3 miembros de ctodos tienen diferentes longitudes. En este caso, como antes c.Lengthse indique el número de elementos de c, (3) y c[0].Length, c[1].Lengthy c[2].Lengthserá 3, 2, y 7, respectivamente.


1
Para completar, también podría haber enumerado la forma en que funcionan las matrices dentadas (por ejemplo int[][]) ;-)
Lucero

Lo consideré, @Lucerno, pero pensé que era un problema diferente: averiguar el tamaño de las cosas dentro de una matriz: una matriz dentada es en realidad solo una matriz unidimensional que contiene matrices de dimensión única, como estoy seguro de que sabe .
Blair Conrad

3
por supuesto, sé que tienes razón y por eso agregué el comentario con una carita sonriente en lugar de escribir una respuesta yo mismo. Sin embargo, la distinción entre [,]y [][]no parece estar clara para todos los principiantes de .NET, por lo que aún puede valer la pena señalar que [][]no es una matriz multidimensional en el sentido de sus respuestas.
Lucero

2
Buena respuesta. Pero, es posible que desee cambiar b.GetLength[0] is 3 and b.GetLength[1] is 5debería ser b.GetLength(0) and b.GetLength(1).
Droogans

29

Puede consultar la documentación de Array para encontrar la respuesta a esta pregunta.

En este caso particular, probablemente necesite Length :

int sizeOfArray = array.Length;

Pero dado que esta es una pregunta tan básica y sin duda tiene muchas más como esta, en lugar de solo decirle la respuesta, prefiero decirle cómo encontrarla usted mismo.

Intellisense de Visual Studio

Cuando escribe el nombre de una variable y presiona la .tecla, le muestra una lista de todos los métodos, propiedades, eventos, etc. disponibles en ese objeto. Cuando resaltas a un miembro, te da una breve descripción de lo que hace.

Presione F1

Si encuentra un método o propiedad que podría hacer lo que desea pero no está seguro, puede mover el cursor sobre él y presionar F1 para obtener ayuda. Aquí obtiene una descripción mucho más detallada y enlaces a información relacionada.

Buscar

Los términos de búsqueda size of array in C#ofrecen muchos enlaces que le dan la respuesta a su pregunta y mucho más. Una de las habilidades más importantes que debe aprender un programador es cómo encontrar información. A menudo es más rápido encontrar la respuesta usted mismo, especialmente si se ha hecho la misma pregunta antes.

Usa un tutorial

Si recién está comenzando a aprender C #, le resultará más fácil seguir un tutorial. Puedo recomendar el tutoriales de C # en MSDN. Si quieres un libro, te recomiendo Essential C # .

Desbordamiento de pila

Si no puede encontrar la respuesta por su cuenta, no dude en publicar la pregunta en Stack Overflow. Pero le agradecemos que demuestre que se ha esforzado por encontrar la respuesta usted mismo primero.


3
Buen trabajo, Mark, ¡pero puede ser exagerado!
Nayan

1
@Nayan: ¡Gracias! Si bien es genial que el OP haya obtenido su respuesta rápidamente de otros carteles, creo que es más importante enseñar a los principiantes cómo encontrar información en lugar de enseñarles respuestas a preguntas específicas. Espero que el OP encuentre útil esta respuesta y que les ahorre tener que hacer cientos de preguntas que podrían haber encontrado las respuestas por sí mismos.
Mark Byers

12
+1 por tomarse el tiempo para adoptar este enfoque - "dale un pescado a un hombre ...", etc.
Peter Kelly

Si alguna vez tengo que hacer lo mismo, simplemente redirigiré los OP a su respuesta aquí =) Y sí, ¡estoy completamente de acuerdo con usted!
Nayan

1
Esto es bueno, pero creo que debería estar vinculado automáticamente de alguna manera. ¿No pueden iniciar una página de "respuestas que valgan la pena ver"? Sin embargo, una cosa que agregaría es que uno debe verificar el desbordamiento de la pila antes de publicar la pregunta. Muchas veces empiezo a publicar la pregunta y luego veo las preguntas relacionadas que aparecen. No estoy seguro de si la respuesta existe en otro lugar de Internet si no pertenece aquí también.
user420667

16

para matriz de 1 dimensión

int[] listItems = new int[] {2,4,8};
int length = listItems.Length;

para matriz multidimensional

int length = listItems.Rank;

Para obtener el tamaño de 1 dimensión

int length =  listItems.GetLength(0);

2
La Rankpropiedad no devuelve el número de elementos, devuelve el número de dimensiones.
Guffa

¿Dónde puedo encontrar documentación para las propiedades admitidas por matrices unidimensionales? (es decir, Length, Rank, GetLength)
Minh Tran


8

Con la Lengthpropiedad.

int[] foo = new int[10];
int n = foo.Length; // n == 10

5

Para una matriz de una sola dimensión, usa la Lengthpropiedad:

int size = theArray.Length;

Para matrices de varias dimensiones, la Lengthpropiedad devuelve el número total de elementos de la matriz. Puede utilizar el GetLengthmétodo para obtener el tamaño de una de las dimensiones:

int size0 = theArray.GetLength(0);

3

En la mayoría de los casos generales se utilizan 'Longitud' y 'Recuento'.

Formación:

int[] myArray = new int[size];
int noOfElements = myArray.Length;

Matriz de lista escrita:

List <int> myArray = new List<int>();
int noOfElements = myArray.Count;

1

dice así: 1D:

 type[] name=new type[size]  //or =new type[]{.....elements...}

2D:

 type[][]name=new type[size][] //second brackets are emtpy

luego, mientras usa esta matriz:

 name[i]=new type[size_of_sec.Dim]

o puedes declarar algo como una matriz

type[ , ] name=new type [size1,size2]

0

Lo que se ha pasado por alto hasta ahora es lo que de repente me irritó:

¿Cómo sé la cantidad de elementos dentro de la matriz? Es .Lengthigual.Count a una lista?

La respuesta es: ¡la cantidad de elementos de tipo X que se han colocado en una matriz de tipo X creada con new X[number] usted tiene que llevarla usted mismo !

P.ej. usando un contador: int countItemsInArray = 0y countItemsInArray++por cada asignación a su matriz.

(La matriz que acaba de crear new X[number]tiene todo el espacio para numberelementos (referencias) de tipo X ya asignados, puede asignar a cualquier lugar dentro como su primera asignación, por ejemplo (si number= 100 y el nombre de la variable = a) a[50] = new X();.

No sé si C # especifica el valor inicial de cada lugar dentro de una matriz en el momento de la creación, si no lo hace o el valor inicial con el que no se puede comparar (porque podría ser un valor que usted mismo haya puesto en la matriz), también tendría que rastrear qué lugares dentro de la matriz ya asignó si no asigna secuencialmente a partir de 0(en cuyo caso todos los lugares son más pequeños de countItemsInArraylo que se asignarían).)

En su pregunta, el tamaño de una matriz (longitud / número de elementos) dependiendo de si / está destinado a representar "alternativa" o "dividir por", este último aún debe cubrirse (el "número de elementos" que acabo de dar como " cantidad de artículos "y otros dieron .Lengthque corresponde al valor de numberen mi código anterior):

C # tiene un sizeofoperador ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Es seguro de usar para tipos integrados (como int) (y solo funciona con tipos (no variables)). Por tanto, el tamaño de una matriz bde tipo inten bytes sería b.Length * sizeof(int).

(Debido a que todo el espacio de una matriz ya se ha asignado en la creación, como se mencionó anteriormente, y sizeofsolo funciona con tipos, ningún código como sizeof(variable)/sizeof(type)funcionaría o produciría la cantidad de elementos sin seguimiento).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.