Taille du tableau (longueur) en C #


98

Comment puis-je déterminer la taille d'un tableau (longueur / nombre d'éléments) en C #?


1
@Marcelo: ... mais il ne peut toujours pas répondre à des questions vraiment simples comme "Où sont mes lunettes". ;)
Guffa

2
Que voulez-vous dire par «taille»? Le nombre d'éléments ou la taille en octets?
Fredrik Mörk

2
@fearofawhackplanet J'ai voté pour parce que j'avais le même problème de trouver la longueur ne fonctionnait pas pour les tableaux multidimensionnels et à la suite de cette question, découvrir Rank et GetLength (index).
TheMathemagician

1
@fearofawhackplanet Je crois que le fait qu'il ait 145 000 vues témoigne de sa pertinence. J'ai voté pour.
brycejl

Réponses:


152

S'il s'agit d'un tableau unidimensionnel a,

a.Length

donnera le nombre d'éléments de a.

Si best un tableau multidimensionnel rectangulaire (par exemple, int[,] b = new int[3, 5];)

b.Rank

donnera le nombre de dimensions (2) et

b.GetLength(dimensionIndex)

obtiendra la longueur de n'importe quelle dimension donnée (indexation basée sur 0 pour les dimensions - donc b.GetLength(0)3 et b.GetLength(1)5).

Consultez la documentation System.Array pour plus d'informations.

Comme @Lucero le souligne dans les commentaires, il existe un concept de "tableau dentelé", qui n'est en réalité rien de plus qu'un tableau unidimensionnel de tableaux (typiquement unidimensionnels).

Par exemple, on pourrait avoir ce qui suit:

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};

Notez que les 3 membres de ctous ont des longueurs différentes. Dans ce cas, comme précédemment c.Lengthindique le nombre d'éléments de c, (3) et c[0].Length, c[1].Lengthet c[2].Lengthsera de 3, 2, et 7, respectivement.


1
Par souci d'exhaustivité, vous pourriez également avoir énuméré le fonctionnement des tableaux dentelés (par exemple int[][]) ;-)
Lucero

Je l'ai considéré, @Lucerno, mais j'ai pensé que c'était un problème différent - déterminer la taille des choses à l' intérieur d' un tableau - un tableau irrégulier n'est en réalité qu'un tableau à une seule dimension qui contient des tableaux à une seule dimension, comme je suis sûr que vous le savez .
Blair Conrad

3
bien sûr, je sais que vous avez raison et c'est pourquoi j'ai ajouté le commentaire avec un smiley au lieu d'écrire une réponse moi-même. Cependant, la distinction entre [,]et [][]ne semble pas être claire pour tous les débutants .NET, il peut donc être intéressant de noter que ce [][]n'est pas un tableau multidimensionnel dans le sens de vos réponses.
Lucero

2
Bonne réponse. Mais, vous voudrez peut-être changer b.GetLength[0] is 3 and b.GetLength[1] is 5devrait être b.GetLength(0) and b.GetLength(1).
Droogans

29

Vous pouvez consulter la documentation de Array pour trouver la réponse à cette question.

Dans ce cas particulier, vous aurez probablement besoin de Length :

int sizeOfArray = array.Length;

Mais comme il s'agit d'une question tellement fondamentale et que vous en avez sans aucun doute beaucoup d'autres comme celle-ci, plutôt que de vous dire simplement la réponse, je préfère vous dire comment trouver la réponse vous-même.

Visual Studio Intellisense

Lorsque vous tapez le nom d'une variable et appuyez sur la .touche, cela vous montre une liste de toutes les méthodes, propriétés, événements, etc. disponibles sur cet objet. Lorsque vous mettez un membre en surbrillance, cela vous donne une brève description de ce qu'il fait.

Appuyez sur F1

Si vous trouvez une méthode ou une propriété qui pourrait faire ce que vous voulez mais que vous n'êtes pas sûr, vous pouvez déplacer le curseur dessus et appuyer sur F1 pour obtenir de l'aide. Ici, vous obtenez une description beaucoup plus détaillée ainsi que des liens vers des informations connexes.

Chercher

Les termes de recherche size of array in C#donnent de nombreux liens qui vous indiquent la réponse à votre question et bien plus encore. L'une des compétences les plus importantes qu'un programmeur doit acquérir est de savoir comment trouver des informations. Il est souvent plus rapide de trouver la réponse vous-même, surtout si la même question a déjà été posée.

Utilisez un tutoriel

Si vous commencez tout juste à apprendre C #, vous trouverez plus facile de suivre un tutoriel. Je peux recommander les didacticiels C # sur MSDN. Si vous voulez un livre, je vous recommande Essential C # .

Dépassement de pile

Si vous ne parvenez pas à trouver la réponse par vous-même, n'hésitez pas à poster la question sur Stack Overflow. Mais nous apprécions que vous montriez que vous avez fait l'effort de trouver la réponse vous-même en premier.


3
Bon travail, Mark, mais c'est peut-être exagéré!
Nayan

1
@Nayan: Merci! Bien que ce soit formidable que l'OP ait rapidement obtenu sa réponse à partir d'autres affiches, je pense qu'il est plus important d'apprendre aux débutants à trouver des informations plutôt que de leur apprendre des réponses à des questions spécifiques. J'espère que le PO trouve cette réponse utile et que cela leur évite d'avoir à poser des centaines de questions dont ils auraient pu trouver les réponses par eux-mêmes.
Mark Byers

12
+1 pour avoir pris le temps d'adopter cette approche - "donnez un poisson à un homme ..." etc.
Peter Kelly

Si jamais je dois faire la même chose, je vais simplement rediriger les OP vers votre réponse ici =) Et oui, je suis complètement d'accord avec vous!
Nayan

1
C'est bien mais je pense qu'il devrait être lié automatiquement d'une manière ou d'une autre. Ne peuvent-ils pas démarrer une page «réponses à voir»? Une chose que j'ajouterais cependant est qu'il faut vérifier le débordement de pile avant de poster la question. Souvent, je commence simplement à publier la question, puis je vois les questions connexes qui apparaissent. Je ne sais pas si la réponse existe ailleurs sur Internet si elle n'appartient pas ici aussi.
user420667

16

pour un tableau dimensionnel

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

pour tableau multidimensionnel

int length = listItems.Rank;

Pour obtenir la taille d'une dimension

int length =  listItems.GetLength(0);

2
La Rankpropriété ne renvoie pas le nombre d'éléments, elle renvoie le nombre de dimensions.
Guffa

Où puis-je trouver de la documentation sur les propriétés prises en charge par les tableaux à 1 dimension? (c. -à- Length, Rank, GetLength)
Minh Tran


8

Avec la Lengthpropriété.

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

5

Pour un tableau à dimension unique, vous utilisez la Lengthpropriété:

int size = theArray.Length;

Pour les tableaux à plusieurs dimensions, la Lengthpropriété renvoie le nombre total d'éléments dans le tableau. Vous pouvez utiliser la GetLengthméthode pour obtenir la taille de l'une des dimensions:

int size0 = theArray.GetLength(0);

3

Dans la plupart des cas généraux, «Longueur» et «Nombre» sont utilisés.

Tableau:

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

Tableau de listes typées:

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

1

ça va comme ça: 1D:

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

2D:

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

alors que vous utilisez ce tableau:

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

ou vous pouvez déclarer quelque chose comme une matrice

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

0

Ce qui a été manqué jusqu'à présent, c'est ce qui m'a soudainement irrité:

Comment connaître la quantité d'éléments à l'intérieur de la baie? Est .Lengthégal.Count une liste?

La réponse est: la quantité d'éléments de type X qui ont été placés dans un tableau de type X créé avec new X[number] vous devez vous emporter !

Par exemple. à l'aide d'un compteur: int countItemsInArray = 0etcountItemsInArray++ pour chaque affectation à votre tableau.

(Le tableau que vous venez de créer avec new X[number]a tout l'espace pour les numberéléments (références) de type X déjà alloué, vous pouvez affecter à n'importe quel endroit à l'intérieur comme votre première affectation, par exemple (si number= 100 et le nom de la variable = a)a[50] = new X(); .

Je ne sais pas si C # spécifie la valeur initiale de chaque endroit dans un tableau lors de la création, si ce n'est pas le cas ou la valeur initiale à laquelle vous ne pouvez pas comparer (car il peut s'agir d'une valeur que vous avez vous-même mise dans le tableau), vous devrait également suivre les emplacements à l'intérieur du tableau que vous avez déjà attribués si vous ne les attribuez pas séquentiellement à partir de 0(auquel cas tous les emplacements inférieurs àcountItemsInArray auxquels ils seraient attribués).)

Dans votre question, la taille d'un tableau (longueur / nombre d'éléments) selon que / est censé représenter "alternative" ou "diviser par" ce dernier doit encore être couvert (le "nombre d'éléments" que je viens de donner comme " quantité d'articles "et d'autres ont donné .Lengthce qui correspond à la valeur de numberdans mon code ci-dessus):

C # a un sizeofopérateur ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Il est sûr à utiliser pour les types intégrés (tels que int) (et ne fonctionne que sur les types (pas les variables)). Ainsi, la taille d'un tableau bde type inten octets serait b.Length * sizeof(int).

(En raison de tout l'espace d'un tableau déjà alloué lors de la création, comme mentionné ci-dessus, et sizeof ne travaillant que sur les types, aucun code comme celui-ci sizeof(variable)/sizeof(type)ne fonctionnerait ou ne donnerait la quantité d'éléments sans suivi.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.