Introduction aux tableaux 2D en C #

Les tableaux bidimensionnels sont une collection d'éléments homogènes qui s'étendent sur plusieurs lignes et colonnes, prenant la forme d'une matrice. Ci-dessous est un exemple d'un tableau 2D qui a m lignes et n colonnes, créant ainsi une matrice de configuration mxn.

( a1, a2, a3, a4, …, an
b1, b2, b3, b4, …, bn
c1, c2, c3, c4, …, cn
.
.
.
m1, m2, m3, m4, …, mn )

Concept de tableaux dentelés

Un tableau dentelé est un tableau de tableaux. Les tableaux dentelés sont essentiellement des tableaux multiples dentelés ensemble pour former un tableau multidimensionnel. Un tableau irrégulier bidimensionnel peut ressembler à ceci:

( ( a1, a2, a3, a4, …, an ),
( b1, b2, b3, b4, …, b20 ),
( c1, c2, c3, c4, …, c30 ),
.
.
.
( m1, m2, m3, m4, …, m25 ) )

Notez que toutes les lignes d'un tableau irrégulier peuvent ou non contenir le même nombre d'éléments.

Véritables tableaux 2D par rapport aux tableaux dentelés

Les tableaux dentelés sont complètement différents d'un vrai tableau 2D du point de vue de l'implémentation. Il est important de comprendre comment C # implémente les tableaux multidimensionnels ainsi que les tableaux irréguliers.

Les langages de programmation diffèrent dans leur implémentation de tableaux multidimensionnels. Certains langages de programmation comme C, C ++, C #, Fortran, etc. prennent en charge de vrais tableaux 2D. Bien qu'il existe d'autres qui simulent ce comportement avec des tableaux de tableaux alias tableaux dentelés. Alors, en quoi un véritable tableau bidimensionnel est-il différent des tableaux irréguliers?

Les deux implémentations de tableaux multidimensionnels sont différentes en termes de consommation de stockage. Alors qu'un vrai tableau 2D aurait m rangées de n éléments chacun, un tableau dentelé pourrait avoir m rangées ayant chacune un nombre différent d'éléments. Cela conduit à un minimum d'espace perdu pour les ensembles de données. Ainsi, le tableau ci-dessous dentelé est parfaitement bien:

int()() jagged array = ( (1, 2, 3, 4),
(5, 6, 7),
(8, 9) )

Si le même ensemble de données devait être implémenté dans un véritable tableau 2D, il aurait été comme ci-dessous:

int(, ) multiDimArray = ( 1, 2, 3, 4
5, 6, 7, 0
8, 9, 0, 0 )

Opérations sur les tableaux 2D en C #

Voici quelques opérations sur les tableaux 2D ci-dessous:

1. Construire un tableau C # 2D

Voyons une façon de déclarer un tableau 2D en C # et une autre façon de ne pas déclarer un tableau 2D en C #.

Comment?

Une véritable implémentation de tableau 2D en C # commence par la déclaration de tableau. Il ressemble à ci-dessous:

int(, ) arr2D;
string(, ) arr2D_s;

Le nombre de virgules dans la définition détermine la dimension du tableau. Notez que vous ne pouvez pas spécifier la taille du tableau dans la déclaration du tableau. Cela doit être fait lors de l'initialisation d'un tableau.

Comment ne pas le faire?

Il est facile de se confondre entre les implémentations de tableaux 2D et les tableaux dentelés. Une déclaration de tableau irrégulier ressemble à ci-dessous:

int()() jagged array;

2. Initialiser le tableau C # 2D

L'étape suivante consiste à initialiser le tableau 2D que nous venons de déclarer. Il existe plusieurs façons de procéder.

Utilisation du nouvel opérateur

arr2D = new int(2, 3); //separate initialization
string(, ) arr2D_s = new string(4, 5); //with declaration

Initialisation avec des valeurs

//without dimensions
arr2D = new int(, )((1, 2), (3, 4), (5, 6));
//with declaration
arr2D_s = new string(2, 2)((“one”, ”two”), (“three”, “four”));

Sans le nouvel opérateur

Int(, ) arr2D_a = ((1, 2), (3, 4), (5, 6), (7, 8));

3. Lire les éléments du tableau C # 2D

Lire un seul élément

L'opération suivante consiste à lire les éléments du tableau 2D. Étant donné que le tableau 2D est une matrice d'éléments mxn, chaque élément a une combinaison d'index de ligne et d'index de colonne désignée. Nous pouvons accéder aux éléments en fournissant l'index de ligne et l'index de colonne dans l'indice. Un exemple est ci-dessous:

int(, ) arr2D_i = ((1, 2), (3, 4), (5, 6), (7, 8));
string arr2D_s = ((“one”, ”two”), (“three”, “four”));
int val_i = arr2D_i(2, 1); //returns '6'
string val_s = arr2D_s(1, 1); //returns 'four'

Remarque- Les indices des lignes et des colonnes commencent à 0. Ainsi, la position d'index (0, 0) est le premier élément et (m-1, n-1) est le dernier élément du tableau.

Lire tous les éléments

Mais, la méthode ci-dessus nous donne la valeur d'un seul élément dans le tableau. Comment traversons-nous tout le tableau pour en lire chaque élément? La solution simple consiste à parcourir l'ensemble du tableau à l'aide de boucles imbriquées for / while.

Code

using System;
public class Program
(
public static void Main()
(
int(, ) arr2D_i = new int(3, 3)((1, 2, 3), (4, 5, 6), (7, 8, 9));
//reading all the elements through for loop
for (int i = 0; i < 3; i++)
(
for (int j = 0; j < 3; j++)
(
Console.Write(arr2D_i(i, j) + "\t");
)
Console.WriteLine("\n");
)
)
)

Production

La méthode GetLength ()

D'accord. Mais, l'exemple ci-dessus ne fonctionne que lorsque je connais le nombre d'éléments dans le tableau au préalable. Et si ma baie est dynamique? Comment traverser tous les éléments d'un tableau dynamique? Voici la méthode GetLength à notre secours.

int arr2D.GetLength (0); // retourne la première dimension (lignes)

int arr2D.GetLength (1); // renvoie la deuxième dimension (colonnes)

Code

using System;
public class Program
(
public static void Main()
(
int(, ) arr2D_i = new int(3, 3)((1, 2, 3), (4, 5, 6), (7, 8, 9));
//reading all the elements through for loop
for (int i = 0; i < arr2D_i.GetLength(0); i++)
(
for (int j = 0; j < arr2D_i.GetLength(1); j++)
(
Console.Write(arr2D_i(i, j) + "\t");
)
Console.WriteLine("\n");
)
)
)

Production

La puissance de pour chaque boucle

La boucle for-each exécute un ensemble de commandes pour chaque élément du tableau. Il s'agit d'un mécanisme de bouclage très puissant et il est fortement recommandé de l'utiliser car il est plus efficace qu'un traditionnel pour la boucle.

Code

using System;
public class Program
(
public static void Main()
(
string(, ) arr2D_s = new string(3, 3)(("one", "two", "three"), ("four", "five", "six"), ("seven", "eight", "nine"));
//reading all the elements through foreach loop
foreach(var ele in arr2D_s)
(
Console.WriteLine(ele);
)
)
)

Production

4. Insérer des éléments dans un tableau 2D C #

Voyons maintenant un exemple sur la façon d'insérer des éléments dans un tableau C # 2D. L'idée est de parcourir chaque position du tableau et de lui attribuer une valeur.

Code

using System;
public class Program
(
public static void Main()
(
int(, ) arr2D_i = new int(3, 3)((1, 2, 3), (4, 5, 6), (7, 8, 9));
int(, ) squares = new int(3, 3);
int(, ) cubes = new int(3, 3);
for (int i = 0; i < arr2D_i.GetLength(0); i++)
(
for (int j = 0; j < arr2D_i.GetLength(1); j++)
(
squares(i, j) = arr2D_i(i, j) * arr2D_i(i, j);
cubes(i, j) = squares(i, j) * arr2D_i(i, j);
)
)
Console.WriteLine("Squares\n");
DisplayArray(squares);
Console.WriteLine("\n\nCubes\n");
DisplayArray(cubes);
)
static void DisplayArray(int(, ) arr)
(
for (int i = 0; i < arr.GetLength(0); i++)
(
for (int j = 0; j < arr.GetLength(1); j++)
( Console.Write(arr(i, j) + "\t"); )
Console.WriteLine("\n");
)
)
)

Production

5. Mettre à jour les éléments du tableau C # 2D

Nous mettrons à jour notre tableau pour multiplier chaque élément par 2. L'idée est de parcourir chaque position du tableau et de mettre à jour la valeur qu'il contient.

Code

using System;
public class Program
(
public static void Main()
(
int(, ) arr2D_i = new int(3, 3)((1, 2, 3), (4, 5, 6), (7, 8, 9));
Console.WriteLine("Original Array\n");
DisplayArray(arr2D_i);
for (int i = 0; i < arr2D_i.GetLength(0); i++)
(
for (int j = 0; j < arr2D_i.GetLength(1); j++)
(
arr2D_i(i, j) *= 2;
)
)
Console.WriteLine("\n\nUpdated Array (multiplied by 2)\n");
DisplayArray(arr2D_i);
)
static void DisplayArray(int(, ) arr)
(
for (int i = 0; i < arr.GetLength(0); i++)
(
for (int j = 0; j < arr.GetLength(1); j++)
(
Console.Write(arr(i, j) + "\t");
)
Console.WriteLine("\n");
)
)
)

Production

6. Supprimer des éléments dans un tableau C # 2D

Il s'agit d'une opération délicate. Il n'est pas possible de supprimer un seul élément d'un vrai tableau C # 2D. La suppression d'un seul élément perturbera les dimensions du tableau de sorte qu'il ne serait plus une matrice. C # ne permet cela que s'il s'agit d'un tableau dentelé.

Alors, quelle est la solution? Supprimons-nous la ligne entière ou la colonne entière? Non, C # ne permettrait pas cela également. Le tableau est de taille fixe lorsqu'il est déclaré ou initialisé. Il a des octets fixes de mémoire alloués. Nous ne pouvons pas changer cela au moment de l'exécution.

La solution ici est de créer un nouveau tableau sans les éléments que nous voulons supprimer.

Code

using System;
public class Program
(
public static void Main()
(
int(, ) arr2D_i = new int(3, 3)((1, 2, 3), (4, 5, 6), (7, 8, 9));
int(, ) new_array = new int(2, 2);
Console.WriteLine("Original Array\n");
DisplayArray(arr2D_i);
int rowToDel = 2;
int colToDel = 2;
for (int i = 0; i < arr2D_i.GetLength(0); i++)
(
if(i==rowToDel)
continue;
for (int j = 0; j < arr2D_i.GetLength(1); j++)
(
if(j==colToDel)
continue;
new_array(i, j)=arr2D_i(i, j);
)
)
Console.WriteLine("\n\nArray after deleting elements\n");
DisplayArray(new_array);
)
static void DisplayArray(int(, ) arr)
(
for (int i = 0; i < arr.GetLength(0); i++)
(
for (int j = 0; j < arr.GetLength(1); j++)
(
Console.Write(arr(i, j) + "\t");
)
Console.WriteLine("\n");
)
)
)

Production

Conclusion

Ainsi, nous avons vu comment un tableau 2D est implémenté en C # et quelles sont les différentes opérations CRUD que nous pouvons effectuer sur celui-ci. Nous avons également appris la différence entre une véritable implémentation 2D et un tableau dentelé. Il y a beaucoup plus de méthodes disponibles en C # pour aider les développeurs à travailler avec les tableaux à l'aise. Vérifiez-les sur les documents MSDN.

Articles recommandés

Ceci est un guide des tableaux 2D en C #. Ici, nous discutons du concept de tableaux dentelés ainsi que des opérations sur les tableaux 2D en C #. Vous pouvez également consulter les articles suivants pour en savoir plus-

  1. Tableaux 2D en Java
  2. Tableaux 2D en Python
  3. Tableaux en C #
  4. Tableaux en C ++
  5. Tableaux en PHP
  6. Graphiques 2D en Java
  7. Comment fonctionnent les tableaux et les listes en Python?
  8. Tableaux multidimensionnels en C ++ avec exemples
  9. Tableaux 2D en PHP