Maison  >  Article  >  développement back-end  >  Tableaux 2D en C#

Tableaux 2D en C#

王林
王林original
2024-09-03 15:11:45220parcourir

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. Vous trouverez ci-dessous un exemple de tableau 2D comportant m lignes et n colonnes, créant ainsi une matrice de configuration m x n.

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

Concept de tableaux irréguliers

Un tableau Jagged est un tableau de tableaux. Les tableaux irréguliers sont essentiellement plusieurs tableaux irréguliers 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.

Vrais tableaux 2D vs tableaux dentelés

Les tableaux Jagged sont complètement différents d'un véritable tableau 2D du point de vue de la mise en œuvre. Il est important de comprendre comment C# implémente à la fois les tableaux multidimensionnels et les tableaux irréguliers.

Les langages de programmation diffèrent par leur implémentation de tableaux multidimensionnels. Certains langages de programmation comme C, C++, C#, Fortran, etc. prennent en charge de véritables tableaux 2D. Bien qu'il en existe d'autres qui simulent ce comportement avec des tableaux de tableaux, c'est-à-dire des tableaux irréguliers. 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 véritable tableau 2D aurait m lignes de n éléments chacune, un tableau irrégulier pourrait avoir m lignes 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 convient parfaitement :

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, cela aurait été comme ci-dessous :

int[,] multiDimArray = [ 1, 2, 3, 4
5, 6, 7, 0
8, 9, 0, 0 ]

Opérations sur des tableaux 2D en C#

Ici, quelques opérations sur les tableaux 2D données ci-dessous :

1. Construire un tableau 2D C#

Voyons une manière de déclarer un tableau 2D en C# et une autre manière de ne pas déclarer un tableau 2D en C#.

Comment faire ?

Une véritable implémentation de tableau 2D en C# commence par la déclaration Array. Cela 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 confondre les implémentations de tableaux 2D et de tableaux irréguliers. Une déclaration de tableau irrégulier ressemble à ci-dessous :

int[][] jagged array;

2. Initialiser le tableau 2D C#

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

Utiliser le 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 d'un tableau 2D C#

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 de m x n éléments, 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 de l'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 du tableau. Comment parcourir l’ensemble du tableau pour en lire chacun de ses éléments ? La solution simple consiste à parcourir l'ensemble du tableau à l'aide de boucles for/while imbriquées.

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");
}
}
}

Sortie

Tableaux 2D en C#

La méthode GetLength()

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

int arr2D.GetLength(0); //renvoie 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");
}
}
}

Sortie

Tableaux 2D en C#

La puissance de 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 son utilisation est fortement recommandée car il est plus efficace qu'une boucle for traditionnelle.

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);
}
}
}

Sortie

Tableaux 2D en C#

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 2D C#. 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");
}
}
}

Output

Tableaux 2D en C#

5. Update Elements in C# 2D Array

We will update our array to multiply each element with 2. The idea is to traverse each position of the array and update the value it holds.

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");
}
}
}

Output

Tableaux 2D en C#

6. Delete Elements in C# 2D Array

This is a tricky operation. It is not possible to delete a single element from a true C# 2D Array. Deleting a single element will disturb the dimensions of the array such that it would no longer be a matrix. C# does not allow that unless it is a jagged array.

So, what is the solution? Do we delete the entire row or the entire column? No, C# would not allow that as well. The array is fixed in size when declared or initialized. It has fix bytes of memory allocated. We cannot change that at run time.

The solution here is to create a new array without the elements that we want to delete.

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");
}
}
}

Output

Tableaux 2D en C#

Conclusion

Thus, we have seen how a 2D Array is implemented in C# and what are the various CRUD operations we can perform on it. We also learned the difference between a true 2D implementation and a jagged array. There are a lot more methods available in C# to assist the developers with working with Arrays at ease. Do check them out at the MSDN docs.

Recommended Articles

This is a guide to 2D Arrays in C#. Here we discuss the concept of jagged arrays along with operations on 2D arrays in C#. You may also look at the following articles to learn more-

  1. 2D Arrays in Java
  2. 2D Arrays In Python
  3. Arrays in C#
  4. Arrays in C++

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Tableaux en C#Article suivant:Tableaux en C#