Dimensione matrice (lunghezza) in C #


98

Come posso determinare la dimensione di un array (lunghezza / numero di elementi) in C #?


1
@ Marcelo: ... ma ancora non riesce a rispondere a domande molto semplici come "Dove sono i miei occhiali". ;)
Guffa

2
Cosa intendi con "taglia"? Il numero di elementi o la dimensione in byte?
Fredrik Mörk

2
@fearofawhackplanet Ho votato verso l'alto perché avevo lo stesso problema di trovare Length non funzionava per array multidimensionali e come risultato di questa domanda ho scoperto Rank e GetLength (indice).
TheMathemagician

1
@fearofawhackplanet Credo che il fatto che abbia 145.000 visualizzazioni sia una testimonianza della sua rilevanza. Votato.
brycejl

Risposte:


152

Se è un array unidimensionale a,

a.Length

darà il numero di elementi di a.

If bè un array multidimensionale rettangolare (ad esempio int[,] b = new int[3, 5];)

b.Rank

darà il numero di dimensioni (2) e

b.GetLength(dimensionIndex)

otterrà la lunghezza di una data dimensione (indicizzazione basata su 0 per le dimensioni - quindi b.GetLength(0)è 3 e b.GetLength(1)è 5).

Vedere la documentazione di System.Array per ulteriori informazioni.

Come sottolinea @Lucero nei commenti, esiste il concetto di "array frastagliato", che in realtà non è altro che un array monodimensionale di array (tipicamente unidimensionali).

Ad esempio, si potrebbe avere quanto segue:

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

Nota che i 3 membri di ctutti hanno lunghezze diverse. In questo caso, come prima c.Lengthindicherà il numero di elementi di c, (3) e c[0].Length, c[1].Lengthe c[2].Lengthsarà 3, 2 e 7, rispettivamente.


1
Per completezza potresti anche aver elencato il modo in cui funzionano gli array frastagliati (es. int[][]) ;-)
Lucero

L'ho considerato, @Lucerno, ma ho pensato che fosse un problema diverso - capire la dimensione delle cose all'interno di un array - un array frastagliato è in realtà solo un array monodimensionale che sembra contenere array a dimensione singola, come sono sicuro che tu sappia .
Blair Conrad

3
ovviamente so che hai ragione ed è per questo che ho aggiunto il commento con una faccina invece di scrivere una risposta io stesso. Tuttavia, la distinzione tra [,]e [][]non sembra essere chiara per tutti i neofiti di .NET, quindi potrebbe comunque valere la pena notare che [][]non è un array multidimensionale nel senso delle risposte.
Lucero

2
Buona risposta. Ma potresti voler cambiare b.GetLength[0] is 3 and b.GetLength[1] is 5dovrebbe essere b.GetLength(0) and b.GetLength(1).
Droogans

29

Puoi guardare la documentazione di Array per trovare la risposta a questa domanda.

In questo caso particolare probabilmente avrai bisogno di Lunghezza :

int sizeOfArray = array.Length;

Ma dal momento che questa è una domanda così basilare e tu senza dubbio ne hai molte altre come questa, piuttosto che dirti semplicemente la risposta, preferisco dirti come trovare la risposta da solo.

Visual Studio Intellisense

Quando digiti il ​​nome di una variabile e premi il .tasto, ti mostra un elenco di tutti i metodi, proprietà, eventi, ecc. Disponibili su quell'oggetto. Quando si evidenzia un membro, viene fornita una breve descrizione di ciò che fa.

Premi F1

Se trovi un metodo o una proprietà che potrebbe fare quello che vuoi ma non sei sicuro, puoi spostare il cursore su di esso e premere F1 per ottenere aiuto. Qui si ottiene una descrizione molto più dettagliata e collegamenti a informazioni correlate.

Ricerca

I termini di ricerca size of array in C# forniscono molti link che ti dicono la risposta alla tua domanda e molto altro ancora. Una delle abilità più importanti che un programmatore deve imparare è come trovare le informazioni. Spesso è più veloce trovare la risposta da soli, soprattutto se la stessa domanda è stata posta in precedenza.

Usa un tutorial

Se stai appena iniziando a imparare il C #, troverai più facile seguire un tutorial. Posso consigliare i tutorial C # su MSDN. Se vuoi un libro, ti consiglio Essential C # .

Stack Overflow

Se non riesci a trovare la risposta da solo, non esitare a pubblicare la domanda su Stack Overflow. Ma apprezziamo se dimostri che ti sei sforzato di trovare prima la risposta.


3
Bel lavoro, Mark, ma potrebbe essere eccessivo!
Nayan

1
@Nayan: grazie! Sebbene sia fantastico che l'OP abbia ottenuto rapidamente la sua risposta da altri poster, ritengo che sia più importante insegnare ai principianti come trovare le informazioni piuttosto che insegnare loro le risposte a domande specifiche. Spero che l'OP trovi utile questa risposta e che eviti di dover porre centinaia di domande che avrebbero potuto trovare le risposte a se stessi.
Mark Byers

12
+1 per aver dedicato del tempo ad adottare questo approccio - "dai un pesce a un uomo ..." ecc.
Peter Kelly

Se mai dovessi fare lo stesso, reindirizzerò gli OP alla tua risposta qui =) E sì, sono completamente d'accordo con te!
Nayan

1
Questo va bene, ma credo che dovrebbe essere collegato automaticamente in qualche modo. Non possono avviare una pagina "risposte che vale la pena vedere"? Una cosa che vorrei aggiungere però è che si dovrebbe controllare lo stack overflow stesso prima di inviare la domanda. Spesso inizio a postare la domanda e poi vedo le domande correlate che appaiono. Non sono sicuro che la risposta esista altrove su Internet se non appartiene anche a questo.
user420667

16

per matrice 1 dimensionale

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

per array multidimensionali

int length = listItems.Rank;

Per ottenere la dimensione di 1 dimensione

int length =  listItems.GetLength(0);

2
La Rankproprietà non restituisce il numero di elementi, restituisce il numero di dimensioni.
Guffa

Dove posso trovare la documentazione per le proprietà supportate da array monodimensionali? (vale a dire, Length, Rank, GetLength)
Minh Tran


8

Con la Lengthproprietà.

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

5

Per un array a dimensione singola, utilizzi la Lengthproprietà:

int size = theArray.Length;

Per array a più dimensioni, il file Length proprietà restituisce il numero totale di elementi nell'array. Puoi utilizzare il GetLengthmetodo per ottenere la dimensione di una delle dimensioni:

int size0 = theArray.GetLength(0);

3

Nella maggior parte dei casi generali vengono utilizzati "Lunghezza" e "Conteggio".

Vettore:

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

Matrice elenco digitato:

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

1

va così: 1D:

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

2D:

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

quindi mentre usi questo array:

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

oppure Puoi dichiarare qualcosa come una matrice

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

0

Quello che è stato perso finora è ciò di cui all'improvviso mi sono irritato:

Come faccio a sapere la quantità di elementi all'interno dell'array? È .Lengthuguale.Count una lista?

La risposta è: la quantità di elementi di tipo X che sono stati inseriti in una matrice di tipo X creata con new X[number] te la devi portare con te !

Per esempio. utilizzando un contatore: int countItemsInArray = 0ecountItemsInArray++ per ogni assegnazione al tuo array.

(L'array appena creato con new X[number]ha tutto lo spazio per gli numberelementi (riferimenti) di tipo X già allocati, puoi assegnare a qualsiasi posto all'interno come primo incarico, ad esempio (if number= 100 e la variabile name = a) a[50] = new X();.

Non so se C # specifica il valore iniziale di ogni posizione all'interno di un array al momento della creazione, se non lo fa o il valore iniziale che non puoi confrontare (perché potrebbe essere un valore che tu stesso hai inserito nell'array), tu dovrebbe tenere traccia anche dei posti all'interno dell'array che hai già assegnato se non assegni sequenzialmente a partire da 0(nel qual caso tutti i posti più piccoli dicountItemsInArray verrebbero assegnati).)

Nella tua domanda la dimensione di un array (lunghezza / numero di elementi) dipende dal fatto che / stia per "alternativa" o "dividi per" quest'ultimo deve ancora essere coperto (il "numero di elementi" che ho appena dato come " quantità di elementi "e altri hanno dato .Lengthche corrisponde al valore dinumber nel mio codice sopra):

C # ha un sizeofoperatore ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). È sicuro da usare per i tipi incorporati (come int) (e opera solo sui tipi (non sulle variabili)). Quindi la dimensione di un array bdi tipo intin byte sarebbeb.Length * sizeof(int) .

(A causa di tutto lo spazio di un array già allocato durante la creazione, come menzionato sopra, e sizeoflavorando solo sui tipi, nessun codice simile sizeof(variable)/sizeof(type)funzionerebbe o produrrebbe la quantità di elementi senza tracciamento.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.