Array-Größe (Länge) in C #

97

Wie kann ich die Größe eines Arrays (Länge / Anzahl der Elemente) in C # bestimmen?

Amal
quelle
1
@Marcelo: ... aber es kann immer noch keine wirklich einfachen Fragen wie "Wo ist meine Brille?" Beantworten. ;)
Guffa
2
Was meinst du mit "Größe"? Die Anzahl der Elemente oder die Größe in Bytes?
Fredrik Mörk
2
@fearofawhackplanet Ich habe upvoted, weil ich das gleiche Problem hatte, Length zu finden, funktionierte nicht für mehrdimensionale Arrays und als Ergebnis dieser Frage entdeckte ich Rank und GetLength (Index).
TheMathemagician
1
@fearofawhackplanet Ich glaube, die Tatsache, dass es 145.000 Aufrufe hat, ist ein Beweis für seine Relevanz. Upvoted.
Brycejl

Antworten:

152

Wenn es sich um ein eindimensionales Array handelt a,

a.Length

gibt die Anzahl der Elemente von an a.

If bist ein rechteckiges mehrdimensionales Array (zum Beispiel int[,] b = new int[3, 5];)

b.Rank

gibt die Anzahl der Dimensionen (2) und an

b.GetLength(dimensionIndex)

erhält die Länge einer bestimmten Dimension (0-basierte Indizierung für die Dimensionen - also b.GetLength(0)3 und b.GetLength(1)5).

Weitere Informationen finden Sie in der System.Array-Dokumentation .

Wie @Lucero in den Kommentaren hervorhebt, gibt es ein Konzept eines "gezackten Arrays", das eigentlich nichts anderes als ein eindimensionales Array von (typischerweise eindimensionalen) Arrays ist.

Zum Beispiel könnte man folgendes haben:

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

Beachten Sie, dass die 3 Mitglieder calle unterschiedliche Längen haben. In diesem Fall, wie zuvor c.Lengthwird gibt die Anzahl der Elemente c, (3) und c[0].Length, c[1].Lengthund c[2].Lengthwird 3, 2 bzw. 7 sein.

Blair Conrad
quelle
1
Der Vollständigkeit halber hätten Sie auch die Funktionsweise gezackter Arrays auflisten können (z. B. int[][]) ;-)
Lucero,
Ich habe es in Betracht gezogen, @Lucerno, aber ich habe es als ein anderes Problem angesehen - die Größe der Dinge in einem Array herauszufinden - ein gezacktes Array ist wirklich nur ein eindimensionales Array, das, wie Sie sicher wissen, zufällig einfach dimensionierte Arrays enthält .
Blair Conrad
3
Natürlich weiß ich, dass Sie Recht haben, und deshalb habe ich den Kommentar mit einem Smiley hinzugefügt, anstatt selbst eine Antwort zu schreiben. Die Unterscheidung zwischen [,]und [][]scheint jedoch nicht für alle .NET-Neulinge klar zu sein. Daher ist es möglicherweise dennoch erwähnenswert, dass dies [][]kein mehrdimensionales Array im Sinne Ihrer Antworten ist.
Lucero
2
Gute Antwort. Aber vielleicht möchten Sie ändern, b.GetLength[0] is 3 and b.GetLength[1] is 5sollte sein b.GetLength(0) and b.GetLength(1).
Droogans
29

Sie können sich die Dokumentation zu Array ansehen finden Sie die Antwort auf diese Frage.

In diesem speziellen Fall benötigen Sie wahrscheinlich Länge :

int sizeOfArray = array.Length;

Aber da dies eine so grundlegende Frage ist und Sie zweifellos noch viel mehr davon haben, anstatt Ihnen nur die Antwort zu sagen, möchte ich Ihnen lieber sagen, wie Sie die Antwort selbst finden können.

Visual Studio Intellisense

Wenn Sie den Namen einer Variablen eingeben und die .Taste drücken, wird eine Liste aller für dieses Objekt verfügbaren Methoden, Eigenschaften, Ereignisse usw. angezeigt. Wenn Sie ein Mitglied markieren, erhalten Sie eine kurze Beschreibung dessen, was es tut.

Drücken Sie F1

Wenn Sie eine Methode oder Eigenschaft finden, die möglicherweise das tut, was Sie möchten, sich aber nicht sicher sind, können Sie den Cursor darüber bewegen und F1 drücken, um Hilfe zu erhalten. Hier erhalten Sie eine viel detailliertere Beschreibung sowie Links zu verwandten Informationen.

Suche

Die Suchbegriffe enthalten size of array in C#viele Links, die Ihnen die Antwort auf Ihre Frage und vieles mehr geben. Eine der wichtigsten Fähigkeiten, die ein Programmierer erlernen muss, ist das Finden von Informationen. Es ist oft schneller, die Antwort selbst zu finden, insbesondere wenn dieselbe Frage bereits gestellt wurde.

Verwenden Sie ein Tutorial

Wenn Sie gerade erst anfangen, C # zu lernen, fällt es Ihnen leichter, einem Tutorial zu folgen. Ich kann die C # -Tutorials auf MSDN empfehlen . Wenn Sie ein Buch möchten, würde ich Essential C # empfehlen .

Paketüberfluss

Wenn Sie die Antwort nicht selbst finden können, können Sie die Frage gerne auf Stack Overflow posten. Wir freuen uns jedoch, wenn Sie zeigen, dass Sie sich die Mühe gemacht haben, die Antwort zuerst selbst zu finden.

Mark Byers
quelle
3
Gute Arbeit, Mark, aber vielleicht ein Overkill!
Nayan
1
@Nayan: Danke! Es ist zwar großartig, dass der OP seine Antwort schnell von anderen Postern erhalten hat, aber ich finde es wichtiger, Anfängern beizubringen, wie man Informationen findet, als ihnen Antworten auf bestimmte Fragen beizubringen. Ich hoffe, das OP findet diese Antwort nützlich und erspart es ihnen, Hunderte von Fragen zu stellen, die sie selbst hätten beantworten können.
Mark Byers
12
+1 dafür, dass Sie sich die Zeit genommen haben, diesen Ansatz zu wählen - "Geben Sie einem Mann einen Fisch ..." usw.
Peter Kelly
Wenn ich jemals das Gleiche tun muss, leite ich die OPs einfach auf Ihre Antwort hier um =) Und ja, ich stimme Ihnen vollkommen zu!
Nayan
1
Das ist gut, aber ich denke, es sollte irgendwie automatisch verknüpft werden. Können sie nicht eine Seite mit Antworten anzeigen, die es wert sind, angesehen zu werden? Eine Sache, die ich jedoch hinzufügen möchte, ist, dass man den Stapelüberlauf selbst überprüfen sollte, bevor man die Frage stellt. Oft beginne ich einfach mit dem Posten der Frage und sehe dann die zugehörigen Fragen, die auftauchen. Ich bin mir nicht sicher, ob die Antwort an anderer Stelle im Internet existiert, wenn sie nicht auch hierher gehört.
user420667
16

für 1 dimensionale Anordnung

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

für mehrdimensionales Array

int length = listItems.Rank;

Um die Größe von 1 Dimension zu erhalten

int length =  listItems.GetLength(0);
Johnny
quelle
2
Die RankEigenschaft gibt nicht die Anzahl der Elemente zurück, sondern die Anzahl der Dimensionen.
Guffa
Wo finde ich Dokumentation zu den Eigenschaften, die von eindimensionalen Arrays unterstützt werden? (dh Length, Rank, GetLength)
Minh Tran
8

yourArray.Length :) :)

Petar Minchev
quelle
8

Mit der LengthImmobilie.

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

Für ein eindimensionales Array verwenden Sie die LengthEigenschaft:

int size = theArray.Length;

Bei Arrays mit mehreren Dimensionen gibt die LengthEigenschaft die Gesamtzahl der Elemente im Array zurück. Mit der GetLengthMethode können Sie die Größe einer der Dimensionen ermitteln:

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

In den meisten allgemeinen Fällen werden "Länge" und "Anzahl" verwendet.

Array:

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

Typisiertes Listenarray:

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

es geht so: 1D:

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

2D:

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

dann, wie Sie dieses Array verwenden:

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

oder Sie können so etwas wie eine Matrix deklarieren

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

Was bisher übersehen wurde, hat mich plötzlich irritiert:

Woher weiß ich, wie viele Elemente sich im Array befinden? Ist .Lengthgleich.Count eine Liste?

Die Antwort lautet: Die Anzahl der Elemente vom Typ X, die in ein mit Ihnen erstelltes Array vom Typ X eingefügt wurden new X[number] , müssen Sie selbst tragen !

Z.B. mit einem Zähler: int countItemsInArray = 0undcountItemsInArray++ für jede Zuordnung zu Ihrem Array.

(Das soeben erstellte Array new X[number]hat bereits Platz für numberElemente (Referenzen) vom Typ X, die bereits zugewiesen wurden. Sie können beispielsweise als erste Zuweisung eine beliebige Stelle innerhalb des Arrays zuweisen (if number= 100 und der Variablenname = a) a[50] = new X();.

Ich weiß nicht, ob C # den Anfangswert jeder Stelle innerhalb eines Arrays bei der Erstellung angibt, wenn dies nicht der Fall ist oder den Anfangswert, mit dem Sie nicht vergleichen können (da es sich möglicherweise um einen Wert handelt, den Sie selbst in das Array eingegeben haben) müsste nachverfolgen, welchen Stellen innerhalb des Arrays Sie bereits zugewiesen haben, wenn Sie nicht nacheinander abweisen 0(in diesem Fall alle Stellen, die kleiner sind als countItemsInArrayzugewiesen).)

In Ihrer Frage muss die Größe eines Arrays (Länge / Anzahl der Elemente) in Abhängigkeit davon, ob / für "alternativ" oder "durch" dividieren "stehen soll, noch abgedeckt werden (die" Anzahl der Elemente ", die ich gerade als" angegeben "habe). Anzahl der Artikel "und andere gaben an .Length, was dem Wert von numberin meinem Code oben entspricht):

C # hat einen sizeofOperator ( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof ). Es ist sicher für integrierte Typen (wie int) zu verwenden (und funktioniert nur mit Typen (nicht mit Variablen)). Somit wäre die Größe eines Arrays bvom Typ intin Bytes b.Length * sizeof(int).

(Da der gesamte Speicherplatz eines Arrays bereits bei der Erstellung zugewiesen wurde, wie oben erwähnt, und sizeofnur mit Typen funktioniert, würde kein Code wie sizeof(variable)/sizeof(type)funktionieren oder die Anzahl der Elemente ohne Nachverfolgung ergeben.)

user5588495
quelle