CD: n 2D-ryhmien esittely

Kaksiulotteiset taulukot ovat kokoelma homogeenisia elementtejä, jotka ulottuvat useiden rivien ja sarakkeiden yli olettaen matriisin muodon. Alla on esimerkki 2D-taulukosta, jossa on m riviä ja n saraketta, jolloin luodaan matriisi, jossa on MxN-kokoonpano.

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

Konsepti räsytettyjen ryhmien kanssa

Jagged-taulukko on taulukko. Räjähtämättömät taulukot ovat olennaisesti useita ryhmiä, jotka on pujottunut yhteen moniulotteisen taulukon muodostamiseksi. Kaksiulotteinen rosoinen ryhmä voi näyttää tällaiselta:

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

Huomaa, että rosoisen taulukon kaikki rivit voivat sisältää tai eivät välttämättä sisällä yhtä monta elementtiä.

Tosi 2D-taulukot vs. Jagged-ryhmät

Jagged-taulukot ovat täysin erilaisia ​​kuin todellinen 2D-ryhmä toteutuksen kannalta. On tärkeää ymmärtää, kuinka C # toteuttaa sekä moniulotteiset että saranaiset taulukot.

Ohjelmointikielet eroavat toisistaan ​​moniulotteisten taulukkojen toteutuksessa. Jotkut ohjelmointikielet, kuten C, C ++, C #, Fortran jne. Tukevat todellisia 2D-ryhmiä. Vaikka on muitakin, jotka simuloivat tätä käyttäytymistä matriisimatriiseilla eli rosoisilla matriiseilla. Joten miten todellinen kaksiulotteinen taulukko eroaa rosoisista ryhmistä?

Moniulotteisten taulukkojen kaksi toteutusta ovat erilaiset tallennuskulutuksen suhteen. Vaikka oikeassa 2D-taulukossa olisi m riviä n elementtiä kussakin, rosoisessa taulukossa voi olla m riviä, joilla jokaisella on eri lukumäärä elementtejä. Tämä johtaa vähäiseen hukkahintaan tietoryhmille. Siten, alarajainen taulukko on täysin hieno:

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

Jos sama tietojoukko olisi toteutettu todellisessa 2D-taulukossa, se olisi ollut seuraava:

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

Toiminnot 2D-ryhmissä C #: ssä

Tässä joitain 2D-ryhmien toimintoja, jotka on annettu alla:

1. Suorita C # 2D-taulukko

Katsotaanpa tapa, jolla julkaistaan ​​2D-taulukko C #: ssä, ja toinen tapa, kuinka ei julisteta 2D-taulukkoa C #: ssä.

Miten?

Todellinen 2D-ryhmän toteutus C #: ssä alkaa Array-ilmoituksella. Se näyttää alla:

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

Pilkkujen lukumäärä määritelmässä määrittelee taulukon ulottuvuuden. Huomaa, että et voi määrittää taulukon kokoa taulukkoilmoituksessa. Se on tehtävä taulukon alustamisen yhteydessä.

Kuinka ei?

2D-taulukkojen ja rosoisten ryhmien toteutusten välillä on helppo sekoittaa. Ripullinen taulukkoilmoitus näyttää alla:

int()() jagged array;

2. Alusta C # 2D-taulukko

Seuraava vaihe on alustaa juuri julistamamme 2D-taulukko. On useita tapoja tehdä niin.

Uuden operaattorin käyttäminen

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

Alustaminen arvoilla

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

Ilman uutta operaattoria

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

3. Lue elementit C # 2D -ryhmästä

Lue yksi elementti

Seuraava toimenpide on 2D-taulukon elementtien lukeminen. Koska 2D-taulukko on mxn-elementtien matriisi, jokaisella elementillä on nimetty rivi-indeksi- ja sarake-indeksiyhdistelmä. Voimme käyttää elementtejä tarjoamalla alaindeksissä rivi-hakemiston ja sarakkeen hakemiston. Alla on esimerkki:

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'

Huomaa - Rivien ja sarakkeiden indeksit alkavat nollasta. Siten indeksipaikka (0, 0) on ensimmäinen elementti ja (m-1, n-1) on taulukon viimeinen elementti.

Lue kaikki elementit

Edellä oleva menetelmä antaa meille taulukon yksittäisen elementin arvon. Kuinka kuljemme läpi koko joukon lukeaksesi sen kaikki elementit? Yksinkertainen ratkaisu on silmukoida koko taulukko läpi sisäkkäisillä / / silmukoilla.

Koodi

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

ulostulo

GetLength () -menetelmä

Okei. Edellä oleva esimerkki toimii vain, kun tiedän etukäteen taulukon elementtien määrän. Entä jos ryhmäni on dynaaminen? Kuinka voin käydä läpi kaikki dynaamisen taulukon elementit? Täältä tulee GetLength-menetelmä pelastamiseksi.

int arr2D.GetLength (0); // palauttaa ensimmäisen ulottuvuuden (rivit)

int arr2D.GetLength (1); // palauttaa toisen ulottuvuuden (sarakkeet)

Koodi

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

ulostulo

Kunkin silmukan teho

Jokaiselle silmukalle suoritetaan joukko komentoja taulukon jokaiselle elementille. Tämä on erittäin tehokas silmukkamekanismi, ja sitä suositellaan käytettäväksi, koska se on tehokkaampi kuin perinteinen silmukka.

Koodi

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

ulostulo

4. Aseta elementit C # 2D -ryhmään

Katsotaanpa nyt esimerkki elementtien lisäämisestä C # 2D-taulukkoon. Ajatuksena on kulkea taulukon jokainen sijainti ja antaa sille arvo.

Koodi

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

ulostulo

5. Päivitä C # 2D -ryhmän elementit

Päivitämme taulukkomme kerrottamaan kunkin elementin kahdella. Ajatuksena on kulkea taulukon jokainen sijainti ja päivittää sen hallussa oleva arvo.

Koodi

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

ulostulo

6. Poista elementit C # 2D -ryhmästä

Tämä on hankala toimenpide. Yksittäistä elementtiä ei voi poistaa todellisesta C # 2D-taulukosta. Yhden elementin poistaminen häiritsee taulukon mittoja siten, että se ei enää olisi matriisi. C # ei salli sitä, ellei se ole rosoinen taulukko.

Joten mikä on ratkaisu? Poistetaanko koko rivi vai koko sarake? Ei, C # ei sallisi sitä myös. Taulukko on kiinteä koko, kun se ilmoitetaan tai alustetaan. Sillä on varattu muistin korjattuja tavuja. Emme voi muuttaa sitä ajon aikana.

Ratkaisu tässä on luoda uusi taulukko ilman elementtejä, jotka haluamme poistaa.

Koodi

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

ulostulo

johtopäätös

Siten olemme nähneet, kuinka 2D-taulukko toteutetaan C #: ssä ja mitkä ovat CRUD-operaatiot, joita voimme suorittaa sille. Oppimme myös eron todellisen 2D-toteutuksen ja rosoisen taulukon välillä. C #: ssä on saatavana paljon enemmän menetelmiä auttaakseen kehittäjiä työskentelemään Arraysin kanssa helposti. Tarkista ne MSDN-dokumenteista.

Suositellut artikkelit

Tämä on opas CD: n 2D-ryhmiin. Tässä keskustellaan pilaantuneiden taulukkojen käsitteestä yhdessä C #: n 2D-taulukkojen operaatioiden kanssa. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja-

  1. 2D-ryhmät Java-tilassa
  2. 2D-ryhmät Pythonissa
  3. Ryhmät C #
  4. Ryhmät C ++: ssa
  5. Taulukot PHP: ssä
  6. 2D-grafiikka Java-versiossa
  7. Kuinka taulukot ja luettelot toimivat Pythonissa?
  8. Moniulotteiset taulukot C ++: ssa esimerkkien avulla
  9. 2D-taulukot PHP: ssä