Úvod do 2D polí v C #

Dvojrozmerné polia sú súborom homogénnych prvkov, ktoré sa rozkladajú na viacerých radoch a stĺpcoch, pričom majú formu matice. Nižšie je uvedený príklad 2D poľa, ktoré má m riadkov a stĺpcov, čím sa vytvára matica konfigurácie mxn.

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

Koncept Jagged Arrays

Jagged Array je rad polí. Zúbkované polia sú v podstate viacnásobné polia zrezané tak, aby vytvorili viacrozmerné pole. Dvojrozmerné zubaté pole môže vyzerať asi takto:

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

Všimnite si, že všetky riadky zubatého poľa môžu alebo nemusia obsahovať rovnaký počet prvkov.

True 2D Arrays vs Jagged Arrays

Jagged Arrays sú z hľadiska implementácie úplne odlišné od skutočného 2D poľa. Je dôležité pochopiť, ako C # implementuje viacrozmerné polia aj zubaté polia.

Programovacie jazyky sa líšia v implementácii multidimenzionálnych polí. Niektoré programovacie jazyky ako C, C ++, C #, Fortran atď. Podporujú skutočné 2D polia. Zatiaľ čo existujú aj iné, ktoré simulujú toto správanie pomocou polia polí známych ako zubaté polia. Ako sa teda líši skutočné dvojrozmerné zoskupenie od zubatých polí?

Dve implementácie viacrozmerných polí sa líšia z hľadiska spotreby úložného priestoru. Zatiaľ čo skutočné 2D pole by malo vždy m riadkov n prvkov, zubaté pole by mohlo mať riadky m, z ktorých každý by mal rôzne počty prvkov. To vedie k minimálnemu plytvaniu priestorom pre súbory údajov. Zostávajúce pole je teda úplne v poriadku:

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

Keby sa rovnaká množina údajov mala implementovať do skutočného 2D poľa, bolo by to takto:

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

Operácie na 2D poliach v C #

Tu sú niektoré operácie 2D polí uvedené nižšie:

1. Zostavte pole C # 2D

Pozrime sa, ako deklarovať 2D pole v C # a ďalší spôsob, ako deklarovať 2D pole v C #.

Ako?

Skutočná implementácia 2D poľa v C # sa začína deklaráciou Array. Vyzerá to takto:

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

Počet čiar v definícii určuje rozmer poľa. Všimnite si, že v deklarácii poľa nemôžete zadať veľkosť poľa. Musí sa to vykonať počas inicializácie poľa.

Ako to urobiť?

Je ľahké sa zamieňať medzi implementáciami 2D polí a zubatými poliami. Vyhlásenie zubatého poľa vyzerá takto:

int()() jagged array;

2. Inicializujte pole C # 2D

Ďalším krokom je inicializácia 2D poľa, ktoré sme práve deklarovali. Existuje niekoľko spôsobov, ako to urobiť.

Používanie nového operátora

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

Inicializácia pomocou hodnôt

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

Bez nového operátora

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

3. Čítanie prvkov z poľa C # 2D

Čítanie jedného prvku

Ďalšou operáciou je načítanie prvkov z 2D poľa. Pretože 2D pole je matica prvkov mxn, každý prvok má určenú kombináciu riadok-index a stĺpec-index. K prvkom môžeme pristupovať tak, že v indexe poskytneme riadok-index a stĺpec-index. Príklad je uvedený nižšie:

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'

Poznámka : Indexy riadkov a stĺpcov začínajú od 0. Pozícia indexu (0, 0) je teda prvým prvkom a (m-1, n-1) je posledným prvkom poľa.

Prečítajte si všetky prvky

Vyššie uvedená metóda nám však dáva hodnotu jedného prvku v poli. Ako prejdeme celé pole, aby sme si prečítali každý jeho prvok? Jednoduché riešenie je opakovanie celého poľa pomocou vnorených slučiek pre / while.

kód

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

Výkon

Metóda GetLength ()

Poriadku. Vyššie uvedený príklad však funguje iba vtedy, keď vopred viem počet prvkov v poli. Čo keď je moje pole dynamické? Ako môžem prechádzať všetkými prvkami dynamického poľa? Tu prichádza naša záchranná metóda GetLength.

int arr2D.GetLength (0); // vracia prvú dimenziu (riadky)

int arr2D.GetLength (1); // vracia druhú dimenziu (stĺpce)

kód

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

Výkon

Výkon každej slučky

Slučka for-each vykoná množinu príkazov pre každý prvok poľa. Toto je veľmi výkonný mechanizmus opakovania a dôrazne sa odporúča používať, pretože je účinnejší ako tradičný spôsob opakovania.

kód

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

Výkon

4. Vložte prvky do poľa C # 2D

Teraz si ukážeme príklad, ako vložiť prvky do poľa C # 2D. Cieľom je prejsť každú polohu poľa a priradiť k nemu hodnotu.

kód

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

Výkon

5. Aktualizujte prvky v poli C # 2D

Budeme aktualizovať naše pole tak, aby sme vynásobili každý prvok 2. Myšlienka je prejsť každú pozíciu poľa a aktualizovať hodnotu, ktorú má.

kód

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

Výkon

6. Vymažte prvky v poli C # 2D

Toto je zložitá operácia. Nie je možné odstrániť jeden prvok zo skutočného poľa C # 2D. Odstránenie jedného prvku naruší rozmery poľa tak, že už nebude maticou. C # to neumožňuje, pokiaľ nejde o zubaté pole.

Aké je teda riešenie? Odstránime celý riadok alebo celý stĺpec? Nie, C # by to tiež nedovolil. Pri deklarovaní alebo inicializácii je pole pevne stanovené. Má pridelené opravné bajty pamäte. To nemôžeme zmeniť za behu.

Riešením je vytvoriť nové pole bez prvkov, ktoré chceme odstrániť.

kód

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

Výkon

záver

Preto sme videli, ako je 2D pole implementované v C # a aké rôzne operácie CRUD na ňom môžeme vykonávať. Dozvedeli sme sa tiež rozdiel medzi skutočnou 2D implementáciou a zubatým poľom. Existuje veľa ďalších metód dostupných v jazyku C #, ktoré vývojárom pomáhajú pri ľahkej práci s poliami. Skontrolujte ich v dokumentoch MSDN.

Odporúčané články

Toto je sprievodca 2D poliami v C #. Tu diskutujeme koncept zubatých polí spolu s operáciami na 2D poliach v C #. Viac informácií nájdete aj v nasledujúcich článkoch

  1. 2D polia v Jave
  2. 2D polia v Pythone
  3. Polia v C #
  4. Polia v C ++
  5. Polia v PHP
  6. 2D grafika v Jave
  7. Ako fungujú polia a zoznamy v Pythone?
  8. Viacrozmerné polia v C ++ s príkladmi
  9. 2D polia v PHP

Kategórie: