Array

Références

L'actualité

Librairie

L'information

Array comme objets

En C#, les tableaux sont en fait des objets, et pas simplement des zones adressables de mémoire contiguë comme en C et C++. Array est le type de base abstrait de tous les types de tableau. Vous pouvez utiliser les propriétés et les autres membres de classe de ce type Array. Vous pourriez, par exemple, utiliser la propriété Length pour obtenir la longueur d'un tableau. Le code suivant affecte la longueur du tableau numbers, c'est-à-dire la valeur 5, à une variable appelée lengthOfNumbers :

Exemple
L'exemple suivant utilise la propriété Rank pour afficher le nombre de dimensions d'un tableau.


Array unidimensionnels

Vous pouvez déclarer un tableau unidimensionnel de cinq entiers comme indiqué dans l'exemple suivant :

Ce tableau contient les éléments de array[0] à array[4]. L'opérateur new est utilisé pour créer le tableau et initialiser ses éléments à leurs valeurs par défaut. Dans cet exemple, tous les éléments du tableau sont initialisés à zéro.

Un tableau qui stocke des éléments de type chaîne peut être déclaré de la même façon. Par exemple :

Initialisation du tableau

Il est possible d'initialiser un tableau lors de sa déclaration, auquel cas le spécificateur de longueur n'est pas nécessaire, car il est déjà fourni par le nombre d'éléments figurant dans la liste d'initialisation. Par exemple :

Un tableau de chaînes peut être initialisé de la même manière. Voici une déclaration d'un tableau de chaînes où chaque élément du tableau est initialisé par un nom de jour de la semaine :

Quand vous initialisez un tableau lors de sa déclaration, vous pouvez utiliser les raccourcis suivants :

Il est possible de déclarer une variable de tableau sans initialisation, mais vous devez alors utiliser l'opérateur new quand vous affectez un tableau à cette variable. Par exemple :

Tableaux de types valeur et de types référence

Considérons la déclaration de tableau suivante :

Le résultat de cette instruction varie selon que SomeType est un type valeur ou un type référence. S'il s'agit d'un type de valeur, l'instruction crée un tableau de 10 éléments, chacun ayant le type SomeType. Si SomeType est un type référence, l'instruction crée un tableau de 10 éléments dont chacun est initialisé avec une référence null.

Pour plus d'informations sur les types valeur et les types références, consultez Types.

Array multidimensionnels

Les tableaux peuvent avoir plusieurs dimensions. Par exemple, la déclaration suivante crée un tableau à deux dimensions composé de quatre lignes et deux colonnes.

La déclaration suivante crée un tableau de trois dimensions, 4, 2 et 3.

Initialisation du tableau

Vous pouvez initialiser le tableau au moment de la déclaration, comme le montre l'exemple suivant.

Vous pouvez aussi initialiser le tableau sans spécifier de rang.

Si vous choisissez de déclarer une variable de tableau sans initialisation, vous devez utiliser l'opérateur new pour assigner un tableau à la variable. L'utilisation de new est illustrée dans l'exemple suivant.

L'exemple suivant assigne une valeur à un élément de tableau particulier.

De la même manière, l'exemple suivant obtient la valeur d'un élément de tableau particulier et l'affecte à la variable elementValue.

L'exemple de code suivant initialise les éléments de tableau avec les valeurs par défaut (sauf pour les tableaux en escalier).


Array en escalier

Un tableau en escalier est un tableau dont les éléments sont des tableaux. Les éléments d'un tableau en escalier peuvent être de dimensions et de tailles différentes. Un tableau en escalier est parfois appelé "tableau de tableaux". Les exemples suivants montrent comment déclarer, initialiser et accéder aux tableaux en escalier.

Voici une déclaration d'un tableau unidimensionnel qui comporte trois éléments, chacun d'eux étant un tableau unidimensionnel d'entiers :

Pour pouvoir utiliser jaggedArray, vous devez initialiser ses éléments. Pour ce faire, procédez comme suit :

Chacun des éléments est un tableau unidimensionnel d'entiers. Le premier élément est un tableau de 5 entiers, le deuxième est un tableau de 4 entiers et le troisième est un tableau de 2 entiers.

Il est aussi possible d'utiliser des initialiseurs pour remplir les éléments de tableau de valeurs, auquel cas vous n'avez pas besoin de la taille du tableau. Par exemple :

Vous pouvez aussi initialiser le tableau au moment de la déclaration, comme ceci :

Vous pouvez utiliser la forme abrégée suivante. Notez que vous ne pouvez pas omettre l'opérateur new dans l'initialisation des éléments, car il n'existe pas d'initialisation par défaut pour les éléments :

Un tableau en escalier est un tableau de tableaux, et par conséquent ses éléments sont des types référence et sont initialisés sur null.

Vous pouvez accéder aux éléments de tableau individuels comme dans ces exemples :

Il est possible de combiner des tableaux en escalier et des tableaux multidimensionnels. Vous trouverez ci-dessous une déclaration et une initialisation d'un tableau en escalier unidimensionnel composé de trois éléments de tableau à deux dimensions de tailles différentes. Pour plus d'informations sur les tableaux à deux dimensions, consultez tableaux multidimensionnels.

Vous pouvez accéder aux différents éléments comme le montre cet exemple, qui présente la valeur de l'élément [1,0] du premier tableau (valeur 5) :

La méthode Length retourne le nombre de tableaux contenus dans le tableau en escalier. Par exemple, en supposant que vous avez déclaré le tableau précédent, cette ligne :

retourne la valeur 3.

Exemple

Cet exemple génère un tableau dont les éléments sont eux-mêmes des tableaux. Chacun des éléments de tableau ont une taille différente.


Utilisation de foreach avec des Array

L'instruction foreach offre une méthode simple et appropriée pour itérer au sein des éléments d'un tableau.

Pour les tableaux unidimensionnels, l'instruction foreach traite les éléments dans l'ordre croissant des index, en commençant par l'index 0 et en terminant par l'index Length - 1 :

Pour les tableaux multidimensionnels, les éléments sont traités de sorte que les index de la dimension la plus à droite sont incrémentés en premier, puis la dimension immédiatement à gauche, et ainsi de suite vers la gauche :

Cependant, dans le cas de tableaux multidimensionnels, l'utilisation d'une boucle for imbriquée vous permet de mieux contrôler l'ordre dans lequel les éléments du tableau sont traités.


Passage de Array en tant qu'arguments

Les tableaux peuvent être passés en tant qu'arguments à des paramètres de méthode. Comme les tableaux sont des types référence, la méthode peut modifier la valeur des éléments.

Passage de tableaux unidimensionnels en tant qu'arguments

Vous pouvez passer un tableau unidimensionnel initialisé à une méthode. Par exemple, l'instruction suivante envoie un tableau à une méthode Print.

Le code suivant illustre une implémentation partielle de la méthode Print.

Vous pouvez initialiser et passer un nouveau tableau en une seule étape, comme dans l'exemple suivant.

Exemple

Dans l'exemple suivant, un tableau de chaînes est initialisé et passé en tant qu'argument à une méthode DisplayArray pour des chaînes. La méthode affiche les éléments du tableau. Ensuite, la méthode ChangeArray inverse les éléments du tableau, puis la méthode ChangeArrayElements modifie les trois premiers éléments du tableau. Une fois que chaque méthode est retournée, la méthode DisplayArray montre que le passage d'un tableau par valeur n'empêche pas les modifications des éléments du tableau.

Passage de tableaux multidimensionnels en tant qu'arguments

Vous pouvez passer un tableau multidimensionnel initialisé à une méthode de la même manière que vous passez un tableau unidimensionnel.

Le code suivant illustre une déclaration partielle d'une méthode Print qui accepte un tableau à deux dimensions en tant qu'argument.

Vous pouvez initialiser et passer un nouveau tableau en une seule étape, comme dans l'exemple suivant :

Exemple

Dans l'exemple suivant, un tableau à deux dimensions d'entiers est initialisé et passé à la méthode Print2DArray. La méthode affiche les éléments du tableau.


Passage de Array en paramètres avec ref et out

Vous pouvez stocker plusieurs variables du même type dans une structure de données de type tableau. Vous déclarez un tableau en spécifiant le type de ses éléments.

type[] arrayName;

L'exemple suivant crée des tableaux unidimensionnels, multidimensionnels et en escalier :

Vue d'ensemble du tableau

Un tableau possède les propriétés suivantes :

  • Un tableau peut être unidimensionnel, multidimensionnel ou en escalier.
  • Le nombre de dimensions et la longueur de chaque dimension sont établis lors de la création de l'instance de tableau. Ces valeurs ne peuvent pas être modifiées pendant la durée de vie de l'instance.
  • Les valeurs par défaut des éléments de tableau numériques sont définies sur zéro et les éléments de référence sont définis sur null.
  • Un tableau en escalier est un tableau de tableaux, et par conséquent ses éléments sont des types référence et sont initialisés sur null.
  • Les tableaux sont indexés sur zéro : un tableau avec n éléments est indexée de 0 à n-1.
  • Les éléments de tableau peuvent être de n'importe quel type, y compris un type tableau.
  • Les types tableau sont des types référence dérivés du type de base abstrait Array. étant donné que ce type implémente IEnumerable et IEnumerable‹T›, vous pouvez utiliser l'itération foreach sur tous les tableaux en C#.


Array implicitement typés

Vous pouvez créer un tableau implicitement typé dans lequel le type de l'instance de tableau est déduit à partir des éléments spécifiés dans l'initialiseur de tableau. Les règles applicables à une variable implicitement typée s'appliquent aussi aux tableaux implicitement typés.

Les tableaux implicitement typés sont généralement utilisés dans les expressions de requête avec des types anonymes et des initialiseurs d'objets et de collections.

Les exemples suivants montrent comment créer un tableau implicitement typé :

Dans l'exemple précédent, vous pouvez constater que dans le cas des tableaux implicitement typés, aucun crochet n'est utilisé à gauche de l'instruction d'initialisation. Notez aussi que les tableaux en escalier sont initialisés à l'aide de new[] à l'instar des tableaux unidimensionnels.

Tableaux implicitement typés dans les initialiseurs d'objets

Quand vous créez un type anonyme qui contient un tableau, le tableau doit être implicitement typé dans l'initialiseur d'objet du type. Dans l'exemple suivant, contacts est un tableau implicitement typé de types anonymes, dont chacun contient un tableau nommé PhoneNumbers. Notez que le mot clé var n'est pas utilisé dans les initialiseurs d'objets.