Uvod v 2D matrike v C #

Dvodimenzionalni nizi so zbirka homogenih elementov, ki segajo čez več vrstic in stolpcev, pri čemer prevzamejo obliko matrice. Spodaj je primer 2D matrike, ki ima m vrstic in n stolpcev, kar ustvarja matrico konfiguracije mxn.

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

Koncept nazobčanih nizov

Jagged Array je niz matrikov. Označeni nizi so v bistvu več nizov, zlepljenih skupaj, da tvorijo večdimenzionalni niz. Dvodimenzionalni nazobčan niz lahko izgleda nekako takole:

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

Upoštevajte, da lahko vse vrstice nazobčanega niza vsebujejo isto število elementov ali ne.

Resnično 2D Arrays vs Jagged Arrays

Označeni nizi so z vidika implementacije popolnoma drugačni od pravega 2D matrike. Pomembno je razumeti, kako C # izvaja tako večdimenzionalne matrike kot tudi nazobčane matrike.

Programi za jezike se razlikujejo po izvajanju večdimenzionalnih nizov. Nekateri programski jeziki, kot so C, C ++, C #, Fortran itd., Podpirajo resnične 2D matrike. Medtem ko obstajajo drugi, ki takšno vedenje simulirajo z nizi nizov, ki so aka nazorni nizi. Kako se resnično dvodimenzionalni niz razlikuje od nazobčanih nizov?

Dve izvedbi večdimenzionalnih nizov sta glede na porabo pomnilnika različni. Medtem ko bi imel resničen dvodimenzionalni niz vsaka m vrstic n elementov, ima nazobčan niz lahko m vrstic, od katerih ima vsako število različnih elementov. To vodi do minimalnega zapravljenega prostora za nabore podatkov. Tako je spodaj nazobčan niz popolnoma v redu:

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

Če bi enak niz podatkov uporabili v pravem 2D matričnem nizu, bi bil naslednji:

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

Operacije na 2D nizih v C #

Tukaj je nekaj operacij na 2D matrikah, podanih spodaj:

1. Sestavite C # 2D matriko

Oglejmo si način, kako razglasiti 2D matriko v C # in drug način, kako ne razglasiti 2D matrike v C #.

Kako?

Resnična izvedba 2D Array v C # se začne z deklaracijo Array. Spodaj je videti:

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

Število vejic v definiciji določa dimenzijo matrike. Upoštevajte, da v deklaraciji matrike ne morete določiti velikosti matrike. To je treba storiti med inicializacijo matrike.

Kako ne?

Med implementacijami 2D matrikov in nazobčanimi nizi se je enostavno zmešati. Označena matrika je videti spodaj:

int()() jagged array;

2. Inicializirajte C # 2D matriko

Naslednji korak je inicializacija 2D matrike, ki smo jo pravkar objavili. Obstaja več načinov za to.

Uporaba novega operaterja

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

Inicializacija z vrednostmi

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

Brez novega operaterja

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

3. Preberite elemente iz C # 2D matrike

Preberite en element

Naslednja operacija je branje elementov iz 2D matrike. Ker je 2D matrika matrika mxn elementov, ima vsak element označeno kombinacijo indeksa vrstic in stolpcev. Do elementov lahko dostopamo z vnosom indeksa vrstic in indeksa stolpcev v podnapisu. Primer je spodaj:

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'

Opomba - Indeksi vrstic in stolpcev se začnejo od 0. Tako je položaj indeksa (0, 0) prvi element in (m-1, n-1) zadnji element matrike.

Preberite vse elemente

Toda zgornja metoda nam daje vrednost posameznega elementa v matriki. Kako preberemo celoten niz, da preberemo vsak njegov element? Preprosta rešitev je iskanje skozi celoten niz z uporabo ugnezdenih za / while zank.

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

Izhod

Metoda GetLength ()

V redu. Toda zgornji primer deluje le, če že prej vem število elementov v matriki. Kaj pa, če je moja matrika dinamična? Kako prečkam vse elemente dinamičnega niza? Tu nam pomaga rešitev GetLength.

int arr2D.GetLength (0); // vrne prvo dimenzijo (vrstice)

int arr2D.GetLength (1); // vrne drugo dimenzijo (stolpci)

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

Izhod

Moč vsake zanke

Zanka za vsaka izvede niz ukazov za vsak element matrike. To je zelo močan mehanizem zanke in ga zelo priporočamo, saj je učinkovitejši od običajnega za zanko.

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

Izhod

4. Vstavite elemente v C # 2D matriko

Zdaj si oglejmo primer, kako vstaviti elemente v C # 2D matriko. Ideja je, da prečkate vsak položaj matrike in ji dodelite vrednost.

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

Izhod

5. Posodobite elemente v C # 2D Array

Posodobili bomo svojo matriko, tako da bomo vsak element pomnožili z 2. Ideja je prečkati vsak položaj matrike in posodobiti vrednost, ki jo ima.

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

Izhod

6. Izbrišite elemente iz C # 2D matrike

To je težavna operacija. Iz pravega niza C # 2D ni mogoče izbrisati niti enega elementa. Če izbrišete en element, boste dimenzije matrike motili tako, da ne bo več matrika. C # tega ne dovoljuje, razen če gre za nazobčan niz.

Kakšna je torej rešitev? Ali izbrišemo celo vrstico ali celoten stolpec? Ne, tudi C # tega ne bi dovolil. Niz je določen v velikosti, ko je razglašen ali inicializiran. Ima dodeljenih bajtov popravkov. Tega ne moremo spremeniti med izvajanjem.

Tukaj je rešitev ustvariti nov niz brez elementov, ki jih želimo izbrisati.

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

Izhod

Zaključek

Tako smo videli, kako se 2D Array izvaja v C # in kakšne različne CRUD operacije lahko izvajamo na njem. Izvedeli smo tudi razliko med resnično 2D izvedbo in nazobčanim nizom. V C # je na voljo veliko več metod, s katerimi lahko razvijalcem olajšate delo z Arrays. Oglejte si jih v dokumentih MSDN.

Priporočeni članki

To je vodnik za 2D matrike v C #. Tukaj razpravljamo o konceptu nazobčanih nizov in operacijah na 2D nizih v C #. Če želite izvedeti več, si oglejte tudi naslednje članke -

  1. 2D matriki na Javi
  2. 2D matrike v Pythonu
  3. Nizi v C #
  4. Nizi v C ++
  5. Nizi v PHP
  6. 2D grafika na Javi
  7. Kako matriki in seznami delujejo v Pythonu?
  8. Večdimenzionalni nizi v C ++ s primeri
  9. 2D matriki v PHP