@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).
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 =newint[3][];
c[0]=newint[]{1,2,3};
c[1]=newint[]{3,14};
c[2]=newint[]{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.
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.
@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.
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:
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):
(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.)
Réponses:
S'il s'agit d'un tableau unidimensionnel
a
,donnera le nombre d'éléments de
a
.Si
b
est un tableau multidimensionnel rectangulaire (par exemple,int[,] b = new int[3, 5];
)donnera le nombre de dimensions (2) et
obtiendra la longueur de n'importe quelle dimension donnée (indexation basée sur 0 pour les dimensions - donc
b.GetLength(0)
3 etb.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:
Notez que les 3 membres de
c
tous ont des longueurs différentes. Dans ce cas, comme précédemmentc.Length
indique le nombre d'éléments dec
, (3) etc[0].Length
,c[1].Length
etc[2].Length
sera de 3, 2, et 7, respectivement.la source
int[][]
) ;-)[,]
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.b.GetLength[0] is 3 and b.GetLength[1] is 5
devrait êtreb.GetLength(0) and b.GetLength(1)
.Vous pouvez consulter la documentation de Array pour trouver la réponse à cette question.
Dans ce cas particulier, vous aurez probablement besoin de 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.
la source
pour un tableau dimensionnel
pour tableau multidimensionnel
Pour obtenir la taille d'une dimension
la source
Rank
propriété ne renvoie pas le nombre d'éléments, elle renvoie le nombre de dimensions.Length
,Rank
,GetLength
)yourArray.Length
:)la source
Avec la
Length
propriété.la source
Pour un tableau à dimension unique, vous utilisez la
Length
propriété:Pour les tableaux à plusieurs dimensions, la
Length
propriété renvoie le nombre total d'éléments dans le tableau. Vous pouvez utiliser laGetLength
méthode pour obtenir la taille de l'une des dimensions:la source
Dans la plupart des cas généraux, «Longueur» et «Nombre» sont utilisés.
Tableau:
Tableau de listes typées:
la source
ça va comme ça: 1D:
2D:
alors que vous utilisez ce tableau:
ou vous pouvez déclarer quelque chose comme une matrice
la source
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 = 0
etcountItemsInArray++
pour chaque affectation à votre tableau.(Le tableau que vous venez de créer avec
new X[number]
a tout l'espace pour lesnumber
é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 (sinumber
= 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é
.Length
ce qui correspond à la valeur denumber
dans mon code ci-dessus):C # a un
sizeof
opé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 tableaub
de typeint
en octets seraitb.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-cisizeof(variable)/sizeof(type)
ne fonctionnerait ou ne donnerait la quantité d'éléments sans suivi.)la source