@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).
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 =newint[3][];
c[0]=newint[]{1,2,3};
c[1]=newint[]{3,14};
c[2]=newint[]{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.
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.
@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.
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:
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):
(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.)
Antworten:
Wenn es sich um ein eindimensionales Array handelt
a
,gibt die Anzahl der Elemente von an
a
.If
b
ist ein rechteckiges mehrdimensionales Array (zum Beispielint[,] b = new int[3, 5];
)gibt die Anzahl der Dimensionen (2) und an
erhält die Länge einer bestimmten Dimension (0-basierte Indizierung für die Dimensionen - also
b.GetLength(0)
3 undb.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:
Beachten Sie, dass die 3 Mitglieder
c
alle unterschiedliche Längen haben. In diesem Fall, wie zuvorc.Length
wird gibt die Anzahl der Elementec
, (3) undc[0].Length
,c[1].Length
undc[2].Length
wird 3, 2 bzw. 7 sein.quelle
int[][]
) ;-)[,]
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.b.GetLength[0] is 3 and b.GetLength[1] is 5
sollte seinb.GetLength(0) and b.GetLength(1)
.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 :
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.
quelle
für 1 dimensionale Anordnung
für mehrdimensionales Array
Um die Größe von 1 Dimension zu erhalten
quelle
Rank
Eigenschaft gibt nicht die Anzahl der Elemente zurück, sondern die Anzahl der Dimensionen.Length
,Rank
,GetLength
)yourArray.Length
:) :)quelle
Mit der
Length
Immobilie.quelle
Für ein eindimensionales Array verwenden Sie die
Length
Eigenschaft:Bei Arrays mit mehreren Dimensionen gibt die
Length
Eigenschaft die Gesamtzahl der Elemente im Array zurück. Mit derGetLength
Methode können Sie die Größe einer der Dimensionen ermitteln:quelle
In den meisten allgemeinen Fällen werden "Länge" und "Anzahl" verwendet.
Array:
Typisiertes Listenarray:
quelle
es geht so: 1D:
2D:
dann, wie Sie dieses Array verwenden:
oder Sie können so etwas wie eine Matrix deklarieren
quelle
Was bisher übersehen wurde, hat mich plötzlich irritiert:
Woher weiß ich, wie viele Elemente sich im Array befinden? Ist
.Length
gleich.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 = 0
undcountItemsInArray++
für jede Zuordnung zu Ihrem Array.(Das soeben erstellte Array
new X[number]
hat bereits Platz fürnumber
Elemente (Referenzen) vom Typ X, die bereits zugewiesen wurden. Sie können beispielsweise als erste Zuweisung eine beliebige Stelle innerhalb des Arrays zuweisen (ifnumber
= 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 alscountItemsInArray
zugewiesen).)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 vonnumber
in meinem Code oben entspricht):C # hat einen
sizeof
Operator ( 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 Arraysb
vom Typint
in Bytesb.Length * sizeof(int)
.(Da der gesamte Speicherplatz eines Arrays bereits bei der Erstellung zugewiesen wurde, wie oben erwähnt, und
sizeof
nur mit Typen funktioniert, würde kein Code wiesizeof(variable)/sizeof(type)
funktionieren oder die Anzahl der Elemente ohne Nachverfolgung ergeben.)quelle