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'
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 -
- 2D matriki na Javi
- 2D matrike v Pythonu
- Nizi v C #
- Nizi v C ++
- Nizi v PHP
- 2D grafika na Javi
- Kako matriki in seznami delujejo v Pythonu?
- Večdimenzionalni nizi v C ++ s primeri
- 2D matriki v PHP