Arrays und Auflistungen (Visual C# Express)

Aktualisiert: November 2007

Das Speichern von Gruppen verwandter Datenelemente ist eine grundlegende Anforderung der meisten Softwareanwendungen. Meistens werden dazu Arrays und Auflistungen verwendet.

Arrays

Arrays sind Auflistungen von Objekten des gleichen Typs. Arrays können praktisch jede Länge besitzen. Sie können zum Speichern von Tausenden oder sogar Millionen von Objekten verwendet werden, allerdings muss die Größe beim Erstellen des Arrays festgelegt werden. Auf jedes Element in einem Array wird mit einem Index zugegriffen, d. h., mit einer Nummer, die die Position oder den Umsetzungsplatz angibt, mit der bzw. auf dem das Objekt im Array gespeichert ist. Arrays können zum Speichern von Referenztypen und Werttypen verwendet werden.

Eindimensionale Arrays

Ein Array ist eine indizierte Auflistung von Objekten. Ein eindimensionales Objektarray wird folgendermaßen deklariert:

type[] arrayName;

Oft werden die im Array enthaltenen Elemente gleichzeitig initialisiert, beispielsweise so:

int[] array = new int[5];

Der Standardwert von numerischen Arrayelementen ist 0 (null), und derjenige von Verweiselementen ist null. Sie können jedoch beim Erstellen von Arrays Werte initialisieren, etwa wie folgt:

int[] array1 = new int[] { 1, 3, 5, 7, 9 };

Oder auch so:

int[] array2 = {1, 3, 5, 7, 9};

Arrays verwenden nullbasierte Indizes, deshalb ist das erste Element im Array Element 0.

string[] days = {"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"};
System.Console.WriteLine(days[0]);  // Outputs "Sun"

Mehrdimensionale Arrays

Vom Konzept her entspricht ein mehrdimensionales Array mit zwei Dimensionen einem Raster. Ein mehrdimensionales Array mit drei Dimensionen sieht wie ein Würfel aus.

// declare multidimension array (two dimensions)
int[,] array2D = new int[2,3];


// declare and initialize multidimension array
int[,] array2D2 = { {1, 2, 3}, {4, 5, 6} };


// write elements in a multidimensional array
for (int i=0; i<2; i++)
{
    for (int j=0; j<3; j++)
    {
        array2D[i,j] = (i + 1) * (j + 1);
    }
}


// read elements in a multidimensional array
for (int i=0; i<2; i++)
{
    for (int j=0; j<3; j++)
    {
        System.Console.Write(array2D[i,j]);
    }
    System.Console.WriteLine();
}

Verzweigte Arrays

Eine Variante des mehrdimensionalen Arrays ist das verzweigte Array, ein aus Arrays bestehendes Array. Ein verzweigtes Array ist ein eindimensionales Array, bei dem jedes Element selbst ein Array ist. Die Elementarrays müssen nicht alle dieselbe Größe haben.

Ein verzweigtes Array wird wie folgt deklariert:

int[][] jaggedArray = new int[3][];

Dadurch wird ein Array aus drei Arrays erstellt. Diese Arrays können wie folgt initialisiert werden:

jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

Verwenden der foreach-Anweisung

Die foreach-Anweisung wird oft verwendet, um auf die einzelnen, in einem Array gespeicherten Elemente zuzugreifen:

int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers)
{
    System.Console.Write("{0} ", i);
}
//Output: 4 5 6 1 2 3 -2 -1 0

Objektarrays

Das Erstellen eines Objektarrays – im Gegensatz zu einem Array von einfachen Datentypen wie ganzen Zahlen – ist ein Vorgang in zwei Schritten. Im ersten Schritt deklarieren Sie das Array. Im zweiten Schritt erstellen Sie die Objekte, die im Array gespeichert werden. In diesem Beispiel wird eine Klasse erstellt, die eine Audio-CD definiert. Dann wird ein Array erstellt, in dem 20 Audio-CDs gespeichert werden.

namespace CDCollection
{
    // Define a CD type.
    class CD
    {
        private string album;
        private string artist;
        private int rating;

        public string Album
        {
            get {return album;}
            set {album = value;} 
        }
        public string Artist
        {
            get {return artist;}
            set {artist = value;}
        }
        public int Rating
        { 
            get {return rating;} 
            set {rating = value;} 
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Create the array to store the CDs.
            CD[] cdLibrary = new CD[20];

            // Populate the CD library with CD objects.
            for (int i=0; i<20; i++)
            {
                cdLibrary[i] = new CD();
            }

            // Assign details to the first album.
            cdLibrary[0].Album = "See";
            cdLibrary[0].Artist = "The Sharp Band";
            cdLibrary[0].Rating = 10;
        }
    }
}

Auflistungen

Ein Array ist nur eine von vielen Optionen zum Speichern von Datengruppen mit C#. Welche Option Sie auswählen, hängt von verschiedenen Faktoren ab, einschließlich davon, wie Sie die Elemente bearbeiten bzw. wie Sie auf sie zugreifen möchten. Eine list ist beispielsweise im Allgemeinen schneller als ein Array, wenn Sie am Anfang oder in der Mitte der Auflistung Elemente einfügen müssen. Andere Typen von Auflistungsklassen sind z. B. eine Zuordnung, eine Struktur und ein Stapel. Jeder dieser Typen hat spezifische Vorteile. Weitere Informationen finden Sie unter System.Collections und System.Collections.Generic.

Im folgenden Beispiel wird die Verwendung der List<T>-Klasse veranschaulicht. Beachten Sie, dass im Gegensatz zur Array-Klasse Elemente in die Mitte der Liste eingefügt werden können. In diesem Beispiel besteht für die Elemente in der Liste die Einschränkung, dass es sich um Zeichenfolgen handeln muss.

public class TestCollections
{
    public static void TestList()
    {
        System.Collections.Generic.List<string> sandwich = new System.Collections.Generic.List<string>();

        sandwich.Add("bacon");
        sandwich.Add("tomato");

        sandwich.Insert(1, "lettuce");

        foreach (string ingredient in sandwich)
        {
            System.Console.WriteLine(ingredient);            
        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Deklarieren eines Arrays (Visual C#)

Gewusst wie: Übergeben von Objektarrays an Methoden (Visual C#)

Gewusst wie: Durchlaufen eines Arrays (Visual C#)

Gewusst wie: Initialisieren eines Arrays (Visual C#)

Gewusst wie: Durchlaufen einer Auflistung (Visual C#)

Konzepte

Einführung in C#

Referenz

Arrays (C#-Programmierhandbuch)

Auflistungsklassen (C#-Programmierhandbuch)

Einführung in Generika (C#-Programmierhandbuch)

Array