@Marcelo: ... mas ainda não consegue responder a perguntas realmente simples como "Onde estão meus óculos". ;)
Guffa
2
O que você quer dizer com "tamanho"? O número de elementos ou tamanho em bytes?
Fredrik Mörk
2
@fearofawhackplanet Eu votei positivamente porque tive o mesmo problema de encontrar Length não funcionava para arrays multidimensionais e, como resultado desta questão, descobrir Rank e GetLength (índice).
TheMathemagician de
1
@fearofawhackplanet Eu acredito que o fato de ter 145.000 visualizações é uma prova de sua relevância. Votado.
brycejl
Respostas:
152
Se for uma matriz unidimensional a,
a.Length
fornecerá o número de elementos de a.
Se bfor uma matriz retangular multidimensional (por exemplo, int[,] b = new int[3, 5];)
b.Rank
dará o número de dimensões (2) e
b.GetLength(dimensionIndex)
obterá o comprimento de qualquer dimensão (indexação baseada em 0 para as dimensões - então b.GetLength(0)é 3 e b.GetLength(1)é 5).
Como @Lucero aponta nos comentários, há um conceito de "matriz denteada", que nada mais é do que uma matriz unidimensional de matrizes (normalmente unidimensionais).
Por exemplo, um poderia ter o seguinte:
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};
Observe que os 3 membros de ctodos têm comprimentos diferentes. Neste caso, como anteriormente c.Lengthirá indicar o número de elementos de c, (3) e c[0].Length, c[1].Length, e c[2].Lengthserá de 3, 2, e 7, respectivamente.
Para completar, você também poderia ter listado a forma como os arrays irregulares funcionam (por exemplo int[][]) ;-)
Lucero
Eu considerei isso, @Lucerno, mas percebi que era um problema diferente - descobrir o tamanho das coisas dentro de um array - um array irregular é realmente apenas um array unidimensional que por acaso contém arrays unidimensionais, como tenho certeza que você sabe .
Blair Conrad
3
claro que sei que você está certo e é por isso que adicionei o comentário com um sorriso em vez de escrever uma resposta eu mesmo. No entanto, a distinção entre [,]e [][]não parece estar clara para todos os novatos em .NET, então ainda pode valer a pena observar que [][]não é uma matriz multidimensional no sentido de suas respostas.
Lucero
2
Boa resposta. Mas, você pode querer mudar b.GetLength[0] is 3 and b.GetLength[1] is 5deve ser b.GetLength(0) and b.GetLength(1).
Droogans
29
Você pode consultar a documentação do Array para descobrir a resposta a esta pergunta.
Neste caso específico, você provavelmente precisa de Comprimento :
int sizeOfArray =array.Length;
Mas como esta é uma pergunta tão básica e sem dúvida você tem muitas outras como esta, em vez de apenas dizer a resposta, prefiro dizer a você como encontrar a resposta sozinho.
Visual Studio Intellisense
Quando você digita o nome de uma variável e pressiona a .tecla, ela mostra uma lista de todos os métodos, propriedades, eventos, etc. disponíveis naquele objeto. Quando você destaca um membro, ele fornece uma breve descrição do que ele faz.
Pressione F1
Se encontrar um método ou propriedade que pode fazer o que você deseja, mas não tiver certeza, você pode mover o cursor sobre ele e pressionar F1 para obter ajuda. Aqui você obtém uma descrição muito mais detalhada e links para informações relacionadas.
Procurar
Os termos de pesquisa size of array in C#fornecem muitos links que fornecem a resposta à sua pergunta e muito mais. Uma das habilidades mais importantes que um programador deve aprender é como encontrar informações. Geralmente é mais rápido encontrar a resposta sozinho, especialmente se a mesma pergunta já foi feita antes.
Use um tutorial
Se você está apenas começando a aprender C #, achará mais fácil seguir um tutorial. Posso recomendar os tutoriais C # no MSDN. Se você quiser um livro, recomendo Essential C # .
Stack Overflow
Se você não conseguir encontrar a resposta sozinho, fique à vontade para postar a pergunta no Stack Overflow. Mas agradecemos se você mostrar que se esforçou para encontrar a resposta sozinho.
@Nayan: Obrigado! Embora seja ótimo que o OP tenha obtido uma resposta rápida de outros participantes, acho que é mais importante ensinar aos iniciantes como encontrar informações do que ensinar-lhes respostas a perguntas específicas. Espero que o OP considere esta resposta útil e evite que eles tenham que fazer centenas de perguntas para as quais eles mesmos poderiam encontrar as respostas.
Mark Byers de
12
+1 por dedicar algum tempo a essa abordagem - "dê um peixe a um homem ..." etc.
Peter Kelly
Se eu tiver que fazer o mesmo, vou redirecionar os OPs para sua resposta aqui =) E sim, concordo totalmente com você!
Nayan
1
Isso é bom, mas acho que deveria ser vinculado automaticamente de alguma forma. Eles não podem iniciar uma página de "respostas que vale a pena ver"? Uma coisa que eu acrescentaria, porém, é que se deve verificar o próprio estouro de pilha antes de postar a questão. Muitas vezes, eu apenas começo a postar a pergunta e vejo as perguntas relacionadas que aparecem. Não tenho certeza se a resposta existe em outro lugar na Internet se não pertencer aqui também.
Para uma matriz de dimensão única, você usa a Lengthpropriedade:
int size = theArray.Length;
Para matrizes de múltiplas dimensões, a Lengthpropriedade retorna o número total de itens na matriz. Você pode usar o GetLengthmétodo para obter o tamanho de uma das dimensões:
O que foi perdido até agora foi o que de repente me deixou irritado:
Como posso saber a quantidade de itens dentro da matriz? É .Lengthigual a .Countuma lista?
A resposta é: a quantidade de itens do tipo X que foram colocados em um array do tipo X criado com new X[number]você deve carregar você mesmo !
Por exemplo. usando um contador: int countItemsInArray = 0e countItemsInArray++para cada atribuição ao seu array.
(O array recém-criado com new X[number]tem todo o espaço para numberitens (referências) do tipo X já alocado, você pode atribuir a qualquer lugar dentro como sua primeira atribuição, por exemplo (if number= 100 e o nome da variável = a) a[50] = new X();.
Não sei se C # especifica o valor inicial de cada lugar dentro de um array na criação, se não especifica ou o valor inicial com o qual você não pode comparar (porque pode ser um valor que você mesmo colocou no array), você teria que rastrear quais lugares dentro da matriz você já atribuiu, se você não atribuir sequencialmente a partir de 0(neste caso, todos os lugares menores do que countItemsInArrayseriam atribuídos).
Em sua pergunta, o tamanho de uma matriz (comprimento / número de itens) dependendo se / deve representar "alternativa" ou "dividir por", o último ainda precisa ser coberto (o "número de itens" que acabei de dar " quantidade de itens "e outros dados .Lengthque correspondem ao valor de numberno meu código acima):
(Como todo o espaço de uma matriz já está sendo alocado na criação, como mencionado acima, e sizeoftrabalhando apenas em tipos, nenhum código como sizeof(variable)/sizeof(type)funcionaria ou geraria a quantidade de itens sem rastreamento.)
Respostas:
Se for uma matriz unidimensional
a
,fornecerá o número de elementos de
a
.Se
b
for uma matriz retangular multidimensional (por exemplo,int[,] b = new int[3, 5];
)dará o número de dimensões (2) e
obterá o comprimento de qualquer dimensão (indexação baseada em 0 para as dimensões - então
b.GetLength(0)
é 3 eb.GetLength(1)
é 5).Consulte a documentação System.Array para obter mais informações.
Como @Lucero aponta nos comentários, há um conceito de "matriz denteada", que nada mais é do que uma matriz unidimensional de matrizes (normalmente unidimensionais).
Por exemplo, um poderia ter o seguinte:
Observe que os 3 membros de
c
todos têm comprimentos diferentes. Neste caso, como anteriormentec.Length
irá indicar o número de elementos dec
, (3) ec[0].Length
,c[1].Length
, ec[2].Length
será de 3, 2, e 7, respectivamente.fonte
int[][]
) ;-)[,]
e[][]
não parece estar clara para todos os novatos em .NET, então ainda pode valer a pena observar que[][]
não é uma matriz multidimensional no sentido de suas respostas.b.GetLength[0] is 3 and b.GetLength[1] is 5
deve serb.GetLength(0) and b.GetLength(1)
.Você pode consultar a documentação do Array para descobrir a resposta a esta pergunta.
Neste caso específico, você provavelmente precisa de Comprimento :
Mas como esta é uma pergunta tão básica e sem dúvida você tem muitas outras como esta, em vez de apenas dizer a resposta, prefiro dizer a você como encontrar a resposta sozinho.
Visual Studio Intellisense
Quando você digita o nome de uma variável e pressiona a
.
tecla, ela mostra uma lista de todos os métodos, propriedades, eventos, etc. disponíveis naquele objeto. Quando você destaca um membro, ele fornece uma breve descrição do que ele faz.Pressione F1
Se encontrar um método ou propriedade que pode fazer o que você deseja, mas não tiver certeza, você pode mover o cursor sobre ele e pressionar F1 para obter ajuda. Aqui você obtém uma descrição muito mais detalhada e links para informações relacionadas.
Procurar
Os termos de pesquisa
size of array in C#
fornecem muitos links que fornecem a resposta à sua pergunta e muito mais. Uma das habilidades mais importantes que um programador deve aprender é como encontrar informações. Geralmente é mais rápido encontrar a resposta sozinho, especialmente se a mesma pergunta já foi feita antes.Use um tutorial
Se você está apenas começando a aprender C #, achará mais fácil seguir um tutorial. Posso recomendar os tutoriais C # no MSDN. Se você quiser um livro, recomendo Essential C # .
Stack Overflow
Se você não conseguir encontrar a resposta sozinho, fique à vontade para postar a pergunta no Stack Overflow. Mas agradecemos se você mostrar que se esforçou para encontrar a resposta sozinho.
fonte
para matriz unidimensional
para matriz multidimensional
Para obter o tamanho de 1 dimensão
fonte
Rank
propriedade não retorna o número de itens, ela retorna o número de dimensões.Length
,Rank
,GetLength
)yourArray.Length
:)fonte
Com a
Length
propriedade.fonte
Para uma matriz de dimensão única, você usa a
Length
propriedade:Para matrizes de múltiplas dimensões, a
Length
propriedade retorna o número total de itens na matriz. Você pode usar oGetLength
método para obter o tamanho de uma das dimensões:fonte
Na maioria dos casos gerais, 'Comprimento' e 'Contagem' são usados.
Array:
Matriz de lista digitada:
fonte
é assim: 1D:
2D:
então, conforme você usa esta matriz:
ou você pode declarar algo como uma matriz
fonte
O que foi perdido até agora foi o que de repente me deixou irritado:
Como posso saber a quantidade de itens dentro da matriz? É
.Length
igual a.Count
uma lista?A resposta é: a quantidade de itens do tipo X que foram colocados em um array do tipo X criado com
new X[number]
você deve carregar você mesmo !Por exemplo. usando um contador:
int countItemsInArray = 0
ecountItemsInArray++
para cada atribuição ao seu array.(O array recém-criado com
new X[number]
tem todo o espaço paranumber
itens (referências) do tipo X já alocado, você pode atribuir a qualquer lugar dentro como sua primeira atribuição, por exemplo (ifnumber
= 100 e o nome da variável =a
)a[50] = new X();
.Não sei se C # especifica o valor inicial de cada lugar dentro de um array na criação, se não especifica ou o valor inicial com o qual você não pode comparar (porque pode ser um valor que você mesmo colocou no array), você teria que rastrear quais lugares dentro da matriz você já atribuiu, se você não atribuir sequencialmente a partir de
0
(neste caso, todos os lugares menores do quecountItemsInArray
seriam atribuídos).Em sua pergunta, o tamanho de uma matriz (comprimento / número de itens) dependendo se / deve representar "alternativa" ou "dividir por", o último ainda precisa ser coberto (o "número de itens" que acabei de dar " quantidade de itens "e outros dados
.Length
que correspondem ao valor denumber
no meu código acima):C # tem um
sizeof
operador ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). É seguro usar para tipos internos (como int) (e opera apenas em tipos (não variáveis)). Portanto, o tamanho de um arrayb
do tipoint
em bytes seriab.Length * sizeof(int)
.(Como todo o espaço de uma matriz já está sendo alocado na criação, como mencionado acima, e
sizeof
trabalhando apenas em tipos, nenhum código comosizeof(variable)/sizeof(type)
funcionaria ou geraria a quantidade de itens sem rastreamento.)fonte