Introduksjon til 2D Arrays i C #

To-dimensjonale matriser er en samling av homogene elementer som spenner over flere rader og kolonner, forutsatt form av en matrise. Nedenfor er et eksempel på en 2D-matrise som har m rader og n kolonner, og dermed oppretter en matrise med mxn-konfigurasjon.

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

Concept of Jagged Arrays

En Jagged Array er en rekke matriser. Jaggde matriser er i hovedsak flere matriser tagget sammen for å danne en flerdimensjonal matrise. Et todimensjonalt taggete utvalg kan se slik ut:

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

Legg merke til at alle radene i et taggete array kan inneholde det samme antall elementer.

Ekte 2D Arrays vs Jagged Arrays

Jagged Arrays er helt annerledes enn en ekte 2D-matrise fra et implementeringsperspektiv. Det er viktig å forstå hvordan C # implementerer både flerdimensjonale matriser så vel som taggete matriser.

Programmeringsspråk skiller seg i implementering av flerdimensjonale matriser. Noen programmeringsspråk som C, C ++, C #, Fortran, etc. støtter ekte 2D-matriser. Mens det er andre som simulerer denne oppførselen med matriser av matriser, også taggete matriser. Så, hvordan er en ekte todimensjonal matrise forskjellig fra taggete matriser?

De to implementeringene av flerdimensjonale matriser er forskjellige når det gjelder lagringsforbruk. Mens en ekte 2D-matrise vil ha m rader med n elementer hver, kan en tagget array ha m rader som hver har forskjellige antall elementer. Dette fører til et minimum bortkastet plass for datasett. Dermed er den under-taggede matrisen helt fin:

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

Hvis det samme datasettet skulle implementeres i en ekte 2D-matrise, ville det ha vært som nedenfor:

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

Operasjoner på 2D Arrays i C #

Her noen operasjoner på 2D Arrays gitt nedenfor:

1. Konstruer C # 2D Array

La oss se en måte å erklære en 2D-matrise i C # og en annen måte å ikke erklære en 2D-matrise i C #.

Hvordan?

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

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

Antall kommaer i definisjonen bestemmer dimensjonen på matrisen. Legg merke til at du ikke kan spesifisere størrelsen på matrisen i matrisedeklarasjonen. Det må gjøres under initialiseringen av en matrise.

Hvordan ikke?

Det er lett å forveksle mellom implementeringene av 2D-matriser og taggede matriser. En tagget arrayerklæring ser ut som nedenfor:

int()() jagged array;

2. Initialiser C # 2D Array

Neste trinn er å initialisere 2D-matrisen vi nettopp erklærte. Det er flere måter å gjøre det på.

Bruke den nye operatøren

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

Initierer med verdier

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

Uten den nye operatøren

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

3. Les Elements from C # 2D Array

Les et enkelt element

Neste operasjon er å lese elementene fra 2D Array. Siden 2D Array er en matrise av mxn-elementer, har hvert element en utpekt kombinasjon av rekkeindekser og kolonneindekser. Vi får tilgang til elementene ved å oppgi radindeks og kolonneindeks i abonnementet. 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'

Merknad - Indeksene for rader og kolonner starter fra 0. Dermed er indeksposisjonen (0, 0) det første elementet og (m-1, n-1) er det siste elementet i matrisen.

Les alle elementene

Men metoden ovenfor gir oss verdien av et enkelt element i matrisen. Hvordan går vi gjennom hele rekken for å lese hvert eneste element i det? Den enkle løsningen går gjennom hele matrisen ved hjelp av nestede 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");
)
)
)

Produksjon

GetLength-metoden

Greit. Men eksemplet ovenfor fungerer bare når jeg vet antall elementer i rekken på forhånd. Hva om matrisen min er dynamisk? Hvordan krysser jeg alle elementene i en dynamisk matrise? Her kommer GetLength-metoden til unnsetning.

int arr2D.GetLength (0); // returnerer første dimensjon (rader)

int arr2D.GetLength (1); // returnerer andre dimensjon (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");
)
)
)

Produksjon

Kraften til for hver løkke

For-løkken utfører et sett med kommandoer for hvert element i matrisen. Dette er en veldig kraftig løkkemekanisme og anbefales sterkt å bruke ettersom den er mer effektiv enn en tradisjonell for sløyfe.

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

Produksjon

4. Sett inn elementer i C # 2D Array

La oss nå se et eksempel på hvordan du setter inn elementer i en C # 2D-matrise. Tanken er å krysse hver posisjon i matrisen og tildele en verdi 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");
)
)
)

Produksjon

5. Oppdater elementer i C # 2D Array

Vi vil oppdatere matrisen vår for å multiplisere hvert element med 2. Tanken er å krysse hver posisjon i arrayen og oppdatere verdien 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");
)
)
)

Produksjon

6. Slett elementer i C # 2D Array

Dette er en vanskelig operasjon. Det er ikke mulig å slette et enkelt element fra en ekte C # 2D-matrise. Å slette et enkelt element vil forstyrre dimensjonene til matrisen slik at det ikke lenger vil være en matrise. C # tillater det ikke med mindre det er et skitt array.

Så hva er løsningen? Sletter vi hele raden eller hele kolonnen? Nei, C # ville ikke tillate det også. Arrayet er fast i størrelse når deklareres eller initialiseres. Den har fikset byte minne tildelt. Vi kan ikke endre det på kjøretid.

Løsningen her er å lage en ny matrise uten elementene 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");
)
)
)

Produksjon

Konklusjon

Dermed har vi sett hvordan en 2D Array implementeres i C # og hva er de forskjellige CRUD-operasjonene vi kan utføre på den. Vi lærte også forskjellen mellom en ekte 2D-implementering og en taggete matrise. Det er mange flere metoder tilgjengelig i C # for å hjelpe utviklerne med å jobbe med Arrays enkelt. Sjekk dem ut på MSDN-dokumentene.

Anbefalte artikler

Dette er en guide til 2D Arrays i C #. Her diskuterer vi konseptet taggete matriser sammen med operasjoner på 2D-matriser i C #. Du kan også se på følgende artikler for å lære mer-

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