Introduktion til 2D Arrays i C #

To-dimensionelle arrays er en samling af homogene elementer, der spænder over flere rækker og kolonner, hvis man antager formen af ​​en matrix. Nedenfor er et eksempel på en 2D-matrix, der har m rækker og n søjler, hvilket skaber en matrix med mxn-konfiguration.

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

Begrebet Jagged Arrays

En tagget array er en matrix af matriser. Rillede arrays er i det væsentlige flere arrays, tagget sammen for at danne en multidimensionel matrix. Et todimensionelt taggete array kan se sådan ud:

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

Bemærk, at alle rækkerne i et taggete array muligvis indeholder det samme antal elementer.

True 2D Arrays vs Jagged Arrays

Jagged Arrays er helt anderledes end et ægte 2D-array fra et implementeringsperspektiv. Det er vigtigt at forstå, hvordan C # implementerer både multidimensionelle arrays såvel som taggete arrays.

Programmeringssprog adskiller sig i deres implementering af multidimensionelle arrays. Nogle programmeringssprog som C, C ++, C #, Fortran osv. Understøtter ægte 2D-arrays. Mens der er andre, der simulerer denne opførsel med matriser af arrays, også klyvede arrays. Så hvordan er en sand todimensionel matrix forskellig fra taggete arrays?

De to implementeringer af multidimensionelle arrays er forskellige med hensyn til lagerforbrug. Mens en ægte 2D-matrix ville have m rækker af n elementer hver, kunne et tagget array have m rækker, der hver har forskellige antal elementer. Dette fører til et minimum spildt rum for datasæt. Således er den neden-taggete matrix helt fin:

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

Hvis det samme datasæt skulle implementeres i en ægte 2D-matrix, ville det have været som nedenfor:

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

Operationer på 2D Arrays i C #

Her nogle operationer på 2D Arrays givet nedenfor:

1. Konstruer C # 2D Array

Lad os se en måde, hvordan man erklærer en 2D-matrix i C # og en anden måde, hvordan man ikke erklærer en 2D-matrix i C #.

Hvordan?

En ægte 2D Array-implementering i C # starter med Array-erklæringen. Det ser ud som nedenfor:

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

Antallet af kommaer i definitionen bestemmer dimensionen af ​​matrixen. Bemærk, at du ikke kan specificere størrelsen på matrixen i arrayerklæringen. Det skal udføres under initialiseringen af ​​en matrix.

Hvordan ikke?

Det er let at forveksle mellem implementeringerne af 2D-arrays og taggete arrays. En tagget array-erklæring ser ud som nedenfor:

int()() jagged array;

2. Initialiser C # 2D Array

Det næste trin er at initialisere den 2D-matrix, vi netop har erklæret. Der er flere måder at gøre det på.

Brug af den nye operatør

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

Initialisering med værdier

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

Uden den nye operatør

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

3. Læs elementer fra C # 2D Array

Læs et enkelt element

Den næste operation er at læse elementerne fra 2D Array. Da 2D Array er en matrix af mxn-elementer, har hvert element en udpeget rækkeindeks og kolonneindekskombination. Vi kan få adgang til elementerne ved at angive rækkeindeks og kolonneindeks i underskriptet. Et eksempel er nedenfor:

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'

Bemærk - Indekserne for rækker og kolonner starter fra 0. Indekspositionen (0, 0) er således det første element, og (m-1, n-1) er det sidste element i matrixen.

Læs alle elementerne

Men ovenstående metode giver os værdien af ​​et enkelt element i matrixen. Hvordan krydser vi hele matrixen for at læse hvert eneste element i det? Den enkle løsning går gennem hele arrayet ved hjælp af indlejrede for / mens løkker.

Kode

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

Produktion

Metoden GetLength ()

Okay. Men ovenstående eksempel fungerer kun, når jeg kender antallet af elementer i matrixen på forhånd. Hvad hvis min matrix er dynamisk? Hvordan krydser jeg alle elementerne i et dynamisk array? Her kommer GetLength-metoden til vores redning.

int arr2D.GetLength (0); // returnerer første dimension (rækker)

int arr2D.GetLength (1); // returnerer anden dimension (kolonner)

Kode

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

Produktion

Kraften til for hver løkke

For-hver-loop udfører et sæt kommandoer for hvert element i arrayet. Dette er en meget kraftig loopingmekanisme og anbefales stærkt at bruge, da den er mere effektiv end en traditionel til loop.

Kode

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

Produktion

4. Indsæt elementer i C # 2D Array

Lad os nu se et eksempel på, hvordan man indsætter elementer i en C # 2D-matrix. Tanken er at krydse hver position i matrixen og tildele en værdi til den.

Kode

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

Produktion

5. Opdater elementer i C # 2D Array

Vi opdaterer vores array for at multiplicere hvert element med 2. Tanken er at krydse hver position af arrayet og opdatere den værdi, den har.

Kode

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

Produktion

6. Slet elementer i C # 2D Array

Dette er en vanskelig operation. Det er ikke muligt at slette et enkelt element fra en ægte C # 2D Array. Sletning af et enkelt element forstyrrer dimensionerne på arrayet, så det ikke længere ville være en matrix. C # tillader det ikke, medmindre det er et taggete array.

Så hvad er løsningen? Sleter vi hele rækken eller hele kolonnen? Nej, C # ville ikke tillade det også. Arrayet er fastlagt i størrelse, når det deklareres eller initialiseres. Det har fikseret bytes af hukommelse tildelt. Vi kan ikke ændre det på kørselstidspunktet.

Løsningen her er at oprette en ny matrix uden de elementer, vi vil slette.

Kode

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

Produktion

Konklusion

Således har vi set, hvordan en 2D Array implementeres i C #, og hvad er de forskellige CRUD-operationer, vi kan udføre på den. Vi lærte også forskellen mellem en ægte 2D-implementering og et taggete array. Der er meget flere metoder tilgængelige i C # for at hjælpe udviklerne med at arbejde med Arrays let. Tjek dem ud i MSDN-dokumenterne.

Anbefalede artikler

Dette er en guide til 2D Arrays i C #. Her diskuterer vi begrebet taggete arrays sammen med operationer på 2D arrays i C #. Du kan også se på de følgende artikler for at lære mere-

  1. 2D-arrays i Java
  2. 2D-arrays i Python
  3. Arrays i C #
  4. Arrays i C ++
  5. Arrays i PHP
  6. 2D-grafik i Java
  7. Hvordan Arrays og lister fungerer i Python?
  8. Multidimensionelle arrays i C ++ med eksempler
  9. 2D-arrays i PHP

Kategori: