Dynamisches Array in C #


111

Gibt es eine Methode zum Erstellen eines dynamischen Arrays in C #?


1
Wenn Sie immer noch im alten Schlamm stecken, können Sie Array.Resize () verwenden, indem Sie stattdessen [] verwenden, wenn List <>. Hier ist ein gutes Beispiel. dotnetperls.com/array-resize
Gian

Der Link dotnetperls.com/array-resize funktioniert nicht. (FYI)
Su Llewellyn

Antworten:


149

Schauen Sie sich die allgemeinen Listen an .


13
Die Frage (wenn auch kurz und nicht beschreibend) dynamic[] bezieht sich nicht auf eine generische Liste. Die Frage könnte sich auf msdn.microsoft.com/en-GB/library/dd264736.aspx (Array dynamischer Typen) oder ExpandoObject msdn.microsoft.com/ beziehen. en-us / library /… Ich könnte -1 die Antwort dafür geben, dass ich diese nicht erwähne
Luke T O'Brien

5
@ LukeTO'Brien, Dynamik wurde in C # 4.0 eingeführt, das ein Jahr nach der ursprünglichen Beantwortung dieser Frage veröffentlicht wurde. OP fragte wahrscheinlich nach einer veränderbaren Datenstruktur wie en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Antworten, die nur aus Links zu Artikeln bestehen, sind nicht hilfreich. Es gibt keine Garantie dafür, dass der Link aktiv bleibt.
JamEngulfer

@ JamEngulfer Das ist falsch. Wenn sein Linktext "Schau dir das an" mit "diesem" verknüpft wäre, würde ich dir zustimmen. Wenn Sie den Link entfernen und sich ansehen, was noch übrig ist, enthält die Antwort des OP auf "Werfen Sie einen Blick auf generische Listen" viele Informationen, damit zukünftige Leser googeln können ...
Lynn Crumbling

88

Erweitern Sie die Antwort von Chris und Migol mit einem Codebeispiel.

Verwenden eines Arrays

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

Verwenden einer generischen Liste. Unter der Haube verwendet die List <T> -Klasse ein Array für die Speicherung, dies jedoch so, dass es effizient wachsen kann.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2
Dieses Beispiel ist halb schlecht, weil wir beide über ArrayList
Migol

21
Diese Antwort ist besser als Ihre @ Migol, da hier gezeigt wird, wie die Liste <> tatsächlich verwendet wird, anstatt sie nur als Schlüsselwort zu erwähnen. "halb schlecht" -> "halb gut" -> gut
fhugas

56

Manchmal werden einfache Arrays generischen Listen vorgezogen, da sie bequemer sind (bessere Leistung für kostspielige Berechnungen, z. B. numerische Algebra-Anwendungen oder für den Datenaustausch mit Statistiksoftware wie R oder Matlab).

In diesem Fall können Sie die ToArray () -Methode verwenden, nachdem Sie Ihre Liste dynamisch initiiert haben

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

Dies ist natürlich nur dann sinnvoll, wenn die Größe des Arrays nie bekannt oder ex ante festgelegt ist . Wenn Sie die Größe Ihres Arrays bereits zu einem bestimmten Zeitpunkt des Programms kennen , ist es besser, es als Array mit fester Länge zu initiieren. (Wenn Sie beispielsweise Daten aus einem ResultSet abrufen, können Sie dessen Größe zählen und dynamisch ein Array dieser Größe initiieren.)


1
Es lohnt sich nicht, solange Sie den Indexer verwenden.
aaimnr

2
Ararys sind nicht bequemer (sie bieten eine Teilmenge der List <T> -Schnittstelle) und bieten fast die gleiche Leistung, da List <T> ein reguläres Array darunter verwendet. Iteration für 6000000 Elemente: Liste / für: 1971ms Array / für: 1864ms (Benchmark von stackoverflow.com/questions/454916/… )
aaimnr

9
Wenn Sie haben ein Array an eine Schnittstelle übergeben , um sie dann muss ein Array sein. Es ist viel einfacher, eine Liste zu erstellen und sie dann in ein Array zu verwandeln, bevor Sie sie übergeben. Ich mag diese Antwort mehr als die anderen, weil sie die Frage anspricht!
Michael Stimson

36

List<T>für stark typisierte oder ArrayListwenn Sie .NET 1.1 haben oder gerne Variablen umwandeln.


2

Beispiel für ein dynamisches Array:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

Sie können dies mit dynamischen Objekten tun:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

Verwenden Sie die Array-Liste, die das Array tatsächlich implementiert. Es benötigt zunächst ein Array der Größe 4, und wenn es voll ist, wird ein neues Array mit seiner doppelten Größe erstellt und die Daten des ersten Arrays werden in das zweite Array kopiert. Jetzt wird das neue Element in ein neues Array eingefügt. Außerdem erstellt der Name des zweiten Arrays einen Alias ​​des ersten Arrays, sodass auf ihn unter demselben Namen wie zuvor zugegriffen werden kann und das erste Array entsorgt wird



0

Sie können ein Arraylist-Objekt aus der Sammlungsklasse verwenden

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

Wenn Sie ein Element hinzufügen möchten, das Sie verwenden können

arr.add();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.