Ich habe gerade angefangen zu lernen C# und in der Einführung zu Arrays zeigten sie, wie man eine Variable als ein Array zu etablieren, aber scheint, dass man die Länge des Arrays bei der Zuweisung angeben muss, so was wenn ich die Länge des Arrays nicht kenne?Array einer unbekannten Länge in C#
Antwort
Arrays müssen eine Länge zugewiesen werden. Verwenden Sie die Klasse List
, um eine beliebige Anzahl von Elementen zuzulassen.
Zum Beispiel:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
var yummy = new List<string>();
while(person.FeelsHappy()) {
yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
"until I finished making it!");
Sie einen Array mit der Größe zu einer Variable erstellen, dh
int size = 50;
string[] words = new string[size]; // contains 50 strings
kann jedoch die Größe später nicht mehr geändert werden, wenn Sie entscheiden, dass Sie 100 Wörter benötigen. Wenn Sie die Größe benötigen, um wirklich dynamisch zu sein, müssen Sie eine andere Art von Datenstruktur verwenden. Versuchen Sie List
.
Diese sind alle null. Versuchen Sie 'string [] words = new string (',', size - 1) .Split (',');' Jetzt werden sie mit '" "' initialisiert. – Bitterblue
Verwenden Sie in .NET 1.x eine ArrayList
oder in .NET 2.0 oder 3.x eine List<yourtype>
.
Suchen Sie nach ihnen in System.Collections
und System.Collections.Generics
.
Verwenden Sie List<>
, um ein "Array" unbekannter Länge aufzubauen.
Verwenden Sie List<>.ToArray()
, um ein reales Array zurückzugeben, und nicht List
.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
versuchen, eine generische Liste anstelle von Array
Sie auch in Dictionarys sehen möchten, wenn Ihre Daten eindeutig zuzuordnen sind, mit Dadurch erhalten Sie zwei Spalten zu arbeiten.
Benutzername, Gesamt Rechnung
es Ihnen in Tool viel gebaut gibt nur den Wert zu suchen und zu aktualisieren.
Kurz zusammengefasst verwenden Sie bitte Collections and Generics.
Es ist ein Muss für jeden C# -Entwickler, es lohnt Zeit verbringen :)
Ein wenig Hintergrundinformationen zu lernen:
Wie gesagt, wenn Sie eine dynamische Sammlung von Dingen haben wollen, verwenden Sie einen List<T>
. Intern verwendet eine Liste auch ein Array für den Speicher. Dieses Array hat genau wie jedes andere Array eine feste Größe. Sobald ein Array mit einer Größe deklariert ist, ändert es sich nicht. Wenn Sie ein Element zu einem List
hinzufügen, wird es dem Array hinzugefügt. Anfangs beginnt die List
mit einem Array, von dem ich glaube, dass es eine Länge von 16 hat. Wenn Sie versuchen, das 17. Element zu List
hinzuzufügen, was passiert ist, dass ein neues Array zugewiesen wird, das ist (denke ich) doppelt so groß wie das alt, also 32 Artikel. Dann wird der Inhalt des alten Arrays in das neue Array kopiert. Während also ein List
dem Außenbeobachter dynamisch erscheinen mag, muss er intern auch den Regeln entsprechen.
Und wie Sie vielleicht geraten haben, ist das Kopieren und Zuweisen der Arrays nicht frei, so sollte man möglichst wenige davon haben und das können Sie (im Konstruktor List
) eine Initiale angeben Größe des Arrays, das in einem perfekten Szenario gerade groß genug ist, um alles, was Sie wollen, zu halten. Dies ist jedoch eine Mikro-Optimierung und es ist unwahrscheinlich, dass es Ihnen jemals etwas ausmachen wird, aber es ist immer schön zu wissen, was Sie sind eigentlich tun.
Dies ist genau die Information, die ich suchte. Genau richtig und viel informativer als die meisten anderen Antworten. +1 –
Wie oben ausgeführt, ist die generische Liste <> der beste Weg, dies zu tun.
Wenn Sie in .NET 1. * stecken, müssen Sie stattdessen die ArrayList-Klasse verwenden. Dies hat keine Überprüfung der Kompilierungszeit und Sie müssen auch Casting hinzufügen - unordentlich.
Nachfolgende Versionen haben auch verschiedene Varianten implementiert - einschließlich Thread-sichere Varianten.
- 1. Array Länge in C
- 2. Array-Länge Variable - c
- 3. Variable Länge Array Speicherplatz in C/C++
- 4. Länge beliebigen Array-Typ in C-Funktion
- 5. JavaScript Objektschlüssel in einer x Länge Array
- 6. C - kopieren Sie die letzten Zeichen von einer unbekannten Zeichenfolge
- 7. Rückruf einer unbekannten Klasse + Funktion
- 8. C# Buchse empfangen Byte-Array-Länge
- 9. C# - Objekt zurückgeben eine Länge Array
- 10. Write String in fester Länge Byte-Array in C#
- 11. variabler Länge Array C++ Wrapper Container
- 12. Threading einer unbekannten Menge von Threads in C#
- 13. Wie sortiere ich ein Array von Zahlen mit einer unbekannten Größe, mit Zeigern in C
- 14. Array-Länge mit Zeigern
- 15. Gibt es eine Abkürzung für Array-Größe/Länge in C?
- 16. Override-Array-Länge in Javascript
- 17. Finden Sie die Größe der unbekannten Größe Array
- 18. Methode ändern Array-Länge mit Array-Rückgabetyp in Java
- 19. Warum ist "long" als Array-Länge in C# erlaubt?
- 20. Array variabler Länge in Numpy C-Erweiterung zurückgeben?
- 21. Get Länge der 2-D-Array in C
- 22. Split-Array in Stücke von N Länge
- 23. Arbeiten mit einer Hashtabelle von unbekannten aber ähnlichen Objekten (C#)
- 24. Index mit einer unbekannten Anzahl von Indizes
- 25. Öffnen einer Datei mit einem unbekannten Namen. C#
- 26. Suche MP3 Länge in C#
- 27. jsDoc - wie Array-Länge
- 28. Get Tondatei Länge in C#
- 29. Maximale Array-Länge Kontingent
- 30. eindimensionale Array Shapes (Länge,) vs. (Länge 1) vs. (Länge)
Was ist, wenn zwei Dimensional? –
'Liste myInts = neue Liste ();' könnte funktionieren. –
Wenn Arrays eine Länge zugewiesen werden müssen, warum kann ich dies tun: String [] arr = "test; die; Werte; jetzt" .Split (';'); und es bestimmt nur die Länge? Und dennoch kann ich nicht dieselbe Codezeile verwenden und die Variablendeklaration in eine andere Zeile verschieben. –