Introduktion till 2D Arrays i C #

Två-dimensionella matriser är en samling av homogena element som sträcker sig över flera rader och kolumner, antagande som en matris. Nedan är ett exempel på en 2D-grupp som har m rader och n kolumner, vilket skapar en matris med mxn-konfiguration.

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

Begreppet Jagged Arrays

En Jagged Array är en matris med matriser. Jaggade matriser är väsentligen flera matriser som är taggade tillsammans för att bilda en flerdimensionell matris. En tvådimensionell taggad matris kan se ut så här:

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

Lägg märke till att alla raderna i en taggad matris kan eller inte innehåller samma antal element.

True 2D Arrays vs Jagged Arrays

Jagged Arrays är helt annorlunda än en sann 2D-grupp från ett implementeringsperspektiv. Det är viktigt att förstå hur C # implementerar såväl flerdimensionella matriser som taggade matriser.

Programmeringsspråk skiljer sig åt i implementeringen av flerdimensionella matriser. Vissa programmeringsspråk som C, C ++, C #, Fortran etc. stöder riktiga 2D-arrayer. Medan det finns andra som simulerar detta beteende med matriser av matriser som också är taggade matriser. Så, hur skiljer sig ett riktigt tvådimensionellt array från taggade matriser?

De två implementeringarna av flerdimensionella matriser är olika vad gäller lagringskonsumtion. Medan en sann 2D-array skulle ha m rader med n element vardera, kan en taggad matris ha m rader som var och en har olika antal element. Detta leder till ett minimalt avfallsutrymme för uppsättningar av data. Således är den nedre-taggade matrisen helt bra:

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

Om samma datauppsättning skulle implementeras i ett riktigt 2D-array, skulle det ha varit som nedan:

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

Operationer på 2D Arrays i C #

Här, några operationer på 2D Arrays nedan:

1. Konstruera C # 2D Array

Låt oss se ett sätt på hur man deklarerar en 2D-grupp i C # och ett annat sätt på hur man inte deklarerar en 2D-grupp i C #.

Hur?

En riktig 2D Array-implementering i C # börjar med Array-deklarationen. Det ser ut som nedan:

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

Antalet kommatecken i definitionen avgör matrisens dimension. Observera att du inte kan ange storleken på matrisen i matrisdeklarationen. Det måste göras under initieringen av en matris.

Hur inte?

Det är lätt att förväxla mellan implementeringarna av 2D-matriser och taggade matriser. En taggad matrisdeklaration ser ut nedan:

int()() jagged array;

2. Initiera C # 2D Array

Nästa steg är att initiera 2D-arrayen som vi just förklarade. Det finns flera sätt att göra det.

Använda den nya operatören

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

Initierar med värden

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

Utan den nya operatören

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

3. Läs element från C # 2D Array

Läs ett enda element

Nästa operation är att läsa elementen från 2D Array. Eftersom 2D Array är en matris av mxn-element, har varje element en särskild kombination av radindex och kolumnindex. Vi kan komma åt elementen genom att tillhandahålla radindex och kolumnindex i subscriptet. Ett exempel är nedan:

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'

Obs - Indexen för rader och kolumner börjar från 0. Därför är indexpositionen (0, 0) det första elementet och (m-1, n-1) är det sista elementet i matrisen.

Läs alla elementen

Men ovanstående metod ger oss värdet av ett enda element i matrisen. Hur går vi igenom hela matrisen för att läsa alla delar av det? Den enkla lösningen går genom hela matrisen med kapslade för / medan-slingor.

Koda

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

Okej. Men exemplet ovan fungerar bara när jag känner till antalet element i matrisen i förväg. Vad händer om min matris är dynamisk? Hur går jag igenom alla element i en dynamisk grupp? Här kommer GetLength-metoden till vår räddning.

int arr2D.GetLength (0); // returnerar den första dimensionen (rader)

int arr2D.GetLength (1); // returnerar den andra dimensionen (kolumner)

Koda

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 för varje slinga

För-slingan kör en uppsättning kommandon för varje element i matrisen. Detta är en mycket kraftfull loopingmekanism och rekommenderas starkt eftersom den är mer effektiv än en traditionell för loop.

Koda

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. Sätt in element i C # 2D Array

Låt oss nu se ett exempel på hur man sätter in element i en C # 2D-matris. Tanken är att korsa varje position i matrisen och tilldela ett värde till det.

Koda

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. Uppdatera element i C # 2D Array

Vi kommer att uppdatera vår matris för att multiplicera varje element med 2. Tanken är att korsa varje position i matrisen och uppdatera värdet som den har.

Koda

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. Radera element i C # 2D Array

Detta är en knepig operation. Det är inte möjligt att ta bort ett enda element från en riktig C # 2D-matris. Att ta bort ett enda element kommer att störa dimensionerna på matrisen så att det inte längre skulle vara en matris. C # tillåter det inte om det inte är en taggad matris.

Så vad är lösningen? Tar vi bort hela raden eller hela kolumnen? Nej, C # skulle inte tillåta det också. Arrayen är fixerad i storlek när den deklareras eller initieras. Det har fixade byte av tilldelat minne. Vi kan inte ändra det vid körning.

Lösningen här är att skapa en ny grupp utan de element som vi vill ta bort.

Koda

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

Slutsats

Således har vi sett hur en 2D Array implementeras i C # och vilka olika CRUD-operationer vi kan utföra på den. Vi lärde oss också skillnaden mellan en riktig 2D-implementering och en taggad matris. Det finns mycket fler metoder i C # för att hjälpa utvecklarna att arbeta med Arrays på ett enkelt sätt. Kolla in dem på MSDN-dokumenten.

Rekommenderade artiklar

Detta är en guide till 2D Arrays i C #. Här diskuterar vi begreppet taggade matriser tillsammans med operationer på 2D-matriser i C #. Du kan också titta på följande artiklar för att lära dig mer-

  1. 2D-matriser i Java
  2. 2D Arrays In Python
  3. Matriser i C #
  4. Matriser i C ++
  5. Arrays i PHP
  6. 2D-grafik i Java
  7. Hur fungerar matriser och listor i Python?
  8. Flerdimensionella matriser i C ++ med exempel
  9. 2D-matriser i PHP

Kategori: