Tamanho do array (comprimento) em C #

98

Como posso determinar o tamanho de uma matriz (comprimento / número de itens) em C #?

Amal
fonte
1
@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).

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:

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

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.

Blair Conrad
fonte
1
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.

Mark Byers
fonte
3
Bom trabalho, Mark, mas pode ser um exagero!
Nayan
1
@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.
user420667
16

para matriz unidimensional

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

para matriz multidimensional

int length = listItems.Rank;

Para obter o tamanho de 1 dimensão

int length =  listItems.GetLength(0);
Johnny
fonte
2
A Rankpropriedade não retorna o número de itens, ela retorna o número de dimensões.
Guffa
Onde posso encontrar documentação para as propriedades suportadas por matrizes unidimensionais? (isto é, Length, Rank, GetLength)
Minh Tran
8

yourArray.Length :)

Petar Minchev
fonte
8

Com a Lengthpropriedade.

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

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:

int size0 = theArray.GetLength(0);
Guffa
fonte
3

Na maioria dos casos gerais, 'Comprimento' e 'Contagem' são usados.

Array:

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

Matriz de lista digitada:

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

é assim: 1D:

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

2D:

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

então, conforme você usa esta matriz:

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

ou você pode declarar algo como uma matriz

type[ , ] name=new type [size1,size2]
Sara Ste.
fonte
0

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):

C # tem um sizeofoperador ( 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 array bdo tipo intem bytes seria b.Length * sizeof(int).

(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.)

user5588495
fonte