Introduksjon til 2D Arrays i C #
To-dimensjonale matriser er en samling av homogene elementer som spenner over flere rader og kolonner, forutsatt form av en matrise. Nedenfor er et eksempel på en 2D-matrise som har m rader og n kolonner, og dermed oppretter en matrise med mxn-konfigurasjon.
( a1, a2, a3, a4, …, an
b1, b2, b3, b4, …, bn
c1, c2, c3, c4, …, cn
.
.
.
m1, m2, m3, m4, …, mn )
Concept of Jagged Arrays
En Jagged Array er en rekke matriser. Jaggde matriser er i hovedsak flere matriser tagget sammen for å danne en flerdimensjonal matrise. Et todimensjonalt taggete utvalg kan se slik ut:
( ( a1, a2, a3, a4, …, an ),
( b1, b2, b3, b4, …, b20 ),
( c1, c2, c3, c4, …, c30 ),
.
.
.
( m1, m2, m3, m4, …, m25 ) )
Legg merke til at alle radene i et taggete array kan inneholde det samme antall elementer.
Ekte 2D Arrays vs Jagged Arrays
Jagged Arrays er helt annerledes enn en ekte 2D-matrise fra et implementeringsperspektiv. Det er viktig å forstå hvordan C # implementerer både flerdimensjonale matriser så vel som taggete matriser.
Programmeringsspråk skiller seg i implementering av flerdimensjonale matriser. Noen programmeringsspråk som C, C ++, C #, Fortran, etc. støtter ekte 2D-matriser. Mens det er andre som simulerer denne oppførselen med matriser av matriser, også taggete matriser. Så, hvordan er en ekte todimensjonal matrise forskjellig fra taggete matriser?
De to implementeringene av flerdimensjonale matriser er forskjellige når det gjelder lagringsforbruk. Mens en ekte 2D-matrise vil ha m rader med n elementer hver, kan en tagget array ha m rader som hver har forskjellige antall elementer. Dette fører til et minimum bortkastet plass for datasett. Dermed er den under-taggede matrisen helt fin:
int()() jagged array = ( (1, 2, 3, 4),
(5, 6, 7),
(8, 9) )
Hvis det samme datasettet skulle implementeres i en ekte 2D-matrise, ville det ha vært som nedenfor:
int(, ) multiDimArray = ( 1, 2, 3, 4
5, 6, 7, 0
8, 9, 0, 0 )
Operasjoner på 2D Arrays i C #
Her noen operasjoner på 2D Arrays gitt nedenfor:
1. Konstruer C # 2D Array
La oss se en måte å erklære en 2D-matrise i C # og en annen måte å ikke erklære en 2D-matrise i C #.
Hvordan?
En ekte 2D Array-implementering i C # starter med Array-erklæringen. Det ser ut som nedenfor:
int(, ) arr2D;
string(, ) arr2D_s;
Antall kommaer i definisjonen bestemmer dimensjonen på matrisen. Legg merke til at du ikke kan spesifisere størrelsen på matrisen i matrisedeklarasjonen. Det må gjøres under initialiseringen av en matrise.
Hvordan ikke?
Det er lett å forveksle mellom implementeringene av 2D-matriser og taggede matriser. En tagget arrayerklæring ser ut som nedenfor:
int()() jagged array;
2. Initialiser C # 2D Array
Neste trinn er å initialisere 2D-matrisen vi nettopp erklærte. Det er flere måter å gjøre det på.
Bruke den nye operatøren
arr2D = new int(2, 3); //separate initialization
string(, ) arr2D_s = new string(4, 5); //with declaration
Initierer med verdier
//without dimensions
arr2D = new int(, )((1, 2), (3, 4), (5, 6));
//with declaration
arr2D_s = new string(2, 2)((“one”, ”two”), (“three”, “four”));
Uten den nye operatøren
Int(, ) arr2D_a = ((1, 2), (3, 4), (5, 6), (7, 8));
3. Les Elements from C # 2D Array
Les et enkelt element
Neste operasjon er å lese elementene fra 2D Array. Siden 2D Array er en matrise av mxn-elementer, har hvert element en utpekt kombinasjon av rekkeindekser og kolonneindekser. Vi får tilgang til elementene ved å oppgi radindeks og kolonneindeks i abonnementet. Et eksempel er nedenfor:
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'
Les alle elementene
Men metoden ovenfor gir oss verdien av et enkelt element i matrisen. Hvordan går vi gjennom hele rekken for å lese hvert eneste element i det? Den enkle løsningen går gjennom hele matrisen ved hjelp av nestede for / mens løkker.
Kode
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");
)
)
)
Produksjon
GetLength-metoden
Greit. Men eksemplet ovenfor fungerer bare når jeg vet antall elementer i rekken på forhånd. Hva om matrisen min er dynamisk? Hvordan krysser jeg alle elementene i en dynamisk matrise? Her kommer GetLength-metoden til unnsetning.
int arr2D.GetLength (0); // returnerer første dimensjon (rader)
int arr2D.GetLength (1); // returnerer andre dimensjon (kolonner)
Kode
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");
)
)
)
Produksjon
Kraften til for hver løkke
For-løkken utfører et sett med kommandoer for hvert element i matrisen. Dette er en veldig kraftig løkkemekanisme og anbefales sterkt å bruke ettersom den er mer effektiv enn en tradisjonell for sløyfe.
Kode
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);
)
)
)
Produksjon
4. Sett inn elementer i C # 2D Array
La oss nå se et eksempel på hvordan du setter inn elementer i en C # 2D-matrise. Tanken er å krysse hver posisjon i matrisen og tildele en verdi til den.
Kode
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");
)
)
)
Produksjon
5. Oppdater elementer i C # 2D Array
Vi vil oppdatere matrisen vår for å multiplisere hvert element med 2. Tanken er å krysse hver posisjon i arrayen og oppdatere verdien den har.
Kode
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");
)
)
)
Produksjon
6. Slett elementer i C # 2D Array
Dette er en vanskelig operasjon. Det er ikke mulig å slette et enkelt element fra en ekte C # 2D-matrise. Å slette et enkelt element vil forstyrre dimensjonene til matrisen slik at det ikke lenger vil være en matrise. C # tillater det ikke med mindre det er et skitt array.
Så hva er løsningen? Sletter vi hele raden eller hele kolonnen? Nei, C # ville ikke tillate det også. Arrayet er fast i størrelse når deklareres eller initialiseres. Den har fikset byte minne tildelt. Vi kan ikke endre det på kjøretid.
Løsningen her er å lage en ny matrise uten elementene vi vil slette.
Kode
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");
)
)
)
Produksjon
Konklusjon
Dermed har vi sett hvordan en 2D Array implementeres i C # og hva er de forskjellige CRUD-operasjonene vi kan utføre på den. Vi lærte også forskjellen mellom en ekte 2D-implementering og en taggete matrise. Det er mange flere metoder tilgjengelig i C # for å hjelpe utviklerne med å jobbe med Arrays enkelt. Sjekk dem ut på MSDN-dokumentene.
Anbefalte artikler
Dette er en guide til 2D Arrays i C #. Her diskuterer vi konseptet taggete matriser sammen med operasjoner på 2D-matriser i C #. Du kan også se på følgende artikler for å lære mer-
- 2D Arrays i Java
- 2D Arrays In Python
- Arrays i C #
- Arrays i C ++
- Arrays i PHP
- 2D-grafikk i Java
- Hvordan arrays og lister fungerer i Python?
- Flerdimensjonale matriser i C ++ med eksempler
- 2D Arrays i PHP