Uvod u 2D nizove u C #

Dvodimenzionalni nizovi su skup homogenih elemenata koji se protežu u više redova i stupaca, pretpostavljajući oblik matrice. Ispod je primjer 2D polja koji ima m redaka i n stupaca, stvarajući tako matricu mxn konfiguracije.

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

Koncept nazubljenih nizova

Jagged Array je niz nizova. Nazivni nizovi su u osnovi više niza združenih u obliku višedimenzionalnog niza. Dvodimenzionalni nazubljeni niz može izgledati ovako:

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

Primijetite da svi redovi nazubljenog niza mogu ili ne sadrže isti broj elemenata.

Istina 2D Arrays vs Jagged Arrays

Označeni nizovi potpuno su različiti od istinskog 2D polja iz perspektive implementacije. Važno je razumjeti kako C # implementira i višedimenzionalne nizove kao i nazubljene nizove.

Programski jezici razlikuju se u njihovoj implementaciji višedimenzionalnih nizova. Neki programski jezici poput C, C ++, C #, Fortran itd. Podržavaju istinite 2D matrice. Dok postoje drugi koji simuliraju ovo ponašanje s nizovima nizova aka nazvanim nizovima. Dakle, kako se pravi dvodimenzionalni niz razlikuje od nazubljenih nizova?

Dvije implementacije višedimenzionalnih nizova razlikuju se u pogledu potrošnje skladištenja. Dok bi pravi 2D niz imao m redaka od n elemenata, jedan nazubljeni niz može imati m redaka, a svaki ima različit broj elemenata. To dovodi do minimalno izgubljenog prostora za skupove podataka. Stoga je ispod nazubljeni niz potpuno u redu:

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

Ako bi se isti skup podataka implementirao u istinski 2D polje, to bi bilo na sljedeći način:

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

Rad na 2D nizovima u C #

Evo nekih operacija na 2D nizovima danim u nastavku:

1. Konstruirajte C # 2D niz

Pogledajmo način kako deklarirati 2D niz u C # i drugi način kako ne deklarirati 2D niz u C #.

Kako da?

Prava implementacija 2D Array u C # započinje s deklaracijom Array. Izgleda dolje:

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

Broj zareza u definiciji određuje dimenziju niza. Imajte na umu da ne možete odrediti veličinu polja u deklaraciji polja. To se mora učiniti tijekom inicijalizacije niza.

Kako ne?

Lako se zbuniti između implementacija 2D matrica i nazubljenih nizova. Naglavljena deklaracija matrice izgleda dolje:

int()() jagged array;

2. Inicijalizirajte C # 2D polje

Sljedeći je korak inicijalizacija 2D matrice koju smo upravo proglasili. Postoji nekoliko načina za to.

Korištenje novog operatora

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

Inicijalizacija s vrijednostima

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

Bez Novog operatera

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

3. Pročitajte elemente iz C # 2D matrice

Pročitajte jedan element

Sljedeća je operacija čitanje elemenata iz 2D matrice. Budući da je 2D matrica matrica mxn elemenata, svaki element ima određenu kombinaciju indeksa redaka i indeksa stupaca. Elementima možemo pristupiti davanjem indeksa redaka i indeksa stupaca u pretpisu. Primjer je u nastavku:

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'

Napomena - Indeksi redova i stupaca počinju od 0. Prema tome, položaj indeksa (0, 0) je prvi element, a (m-1, n-1) posljednji element matrice.

Pročitajte sve elemente

Ali, gornja metoda daje nam vrijednost jednog elementa u nizu. Kako ćemo preći čitav niz da bismo pročitali svaki njegov element? Jednostavno rješenje je petljati kroz čitav niz koristeći ugniježđene za / while petlje.

Kodirati

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

Izlaz

Metoda GetLength ()

U redu. No, gornji primjer funkcionira samo kad unaprijed znam broj elemenata u nizu. Što ako je moj niz dinamičan? Kako mogu preći sve elemente dinamičkog niza? Evo nam dolazi metoda GetLength.

int arr2D.GetLength (0); // vraća prvu dimenziju (redovi)

int arr2D.GetLength (1); // vraća drugu dimenziju (stupci)

Kodirati

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

Izlaz

Snaga svake petlje

Petlja for-svaka izvršava skup naredbi za svaki element polja. Ovo je vrlo moćan mehanizam za petlju i preporučuje se upotreba jer je učinkovitiji od tradicionalnog za petlju.

Kodirati

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

Izlaz

4. Umetnite elemente u C # 2D polje

Sada ćemo vidjeti primjer kako umetnuti elemente u C # 2D polje. Ideja je prelistati svaki položaj matrice i dodijeliti mu vrijednost.

Kodirati

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

Izlaz

5. Ažurirajte elemente u C # 2D polju

Ažurirat ćemo našu matricu da svaki element pomnožimo s 2. Ideja je preći svaki položaj matrice i ažurirati vrijednost koju drži.

Kodirati

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

Izlaz

6. Izbrišite elemente u C # 2D polju

Ovo je lukava operacija. Nije moguće izbrisati niti jedan element iz stvarnog C # 2D polja. Brisanje pojedinog elementa poremetit će dimenzije matrice tako da više nije matrica. C # to ne dopušta ako nije riječ o narezanom nizu.

Dakle, što je rješenje? Da li ćemo izbrisati cijeli red ili cijeli stupac? Ne, ni C # to ne bi dopustila. Niz se fiksira u veličini kada je deklarirano ili inicijalizirano. Ima dodijeljen bajt za popravljanje memorije. To ne možemo promijeniti u vrijeme izvođenja.

Ovdje je rješenje stvoriti novi niz bez elemenata koje želimo izbrisati.

Kodirati

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

Izlaz

Zaključak

Dakle, vidjeli smo kako se 2D Array implementira u C # i koje su različite CRUD operacije koje na njemu možemo izvoditi. Također smo saznali razliku između prave 2D implementacije i nazobčanog niza. Postoji mnogo više metoda dostupnih u C # kako bi programerima olakšali rad s Arrays-om. Provjerite ih u dokumentima MSDN.

Preporučeni članci

Ovo je vodič za 2D polja u C #. Ovdje ćemo raspravljati o konceptu nazubljenih nizova, zajedno s operacijama na 2D nizovima u C #. Možete pogledati i sljedeće članke da biste saznali više -

  1. 2D nizovi na Javi
  2. 2D polja u Pythonu
  3. Nizovi u C #
  4. Nizi u C ++
  5. Nizovi u PHP-u
  6. 2D grafika na Javi
  7. Kako nizovi i popisi rade u Pythonu?
  8. Višedimenzionalni nizovi u C ++ s primjerima
  9. 2D polja u PHP-u

Kategorija: