Увод у 2Д низове у Ц #

Дводимензионални низови су скуп хомогених елемената који се простиру на више редова и ступаца, претпостављајући облик матрице. Испод је пример 2Д матрице која има м редака и н ступаца, стварајући тако матрицу мкн конфигурације.

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

Концепт назубљених низова

Јаггед Арраи је низ низова. Означени низови су у основи више низа здружених у облику вишедимензионалног низа. Дводимензионални назубљени низ може изгледати овако:

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

Примијетите да сви редови назубљеног низа могу или не садрже исти број елемената.

Труе 2Д Арраис вс Јаггед Арраис

Означени низови су потпуно другачији од правих 2Д матрица из перспективе имплементације. Важно је разумјети како Ц # имплементира и вишедимензионалне низове као и назубљене низове.

Програмски језици се разликују по њиховој имплементацији вишедимензионалних низова. Неки програмски језици као што су Ц, Ц ++, Ц #, Фортран, итд. Подржавају истините 2Д матрице. Док постоје други који симулирају ово понашање с низовима низова ака названим низовима. Дакле, како се прави дводимензионални низ разликује од назубљених низова?

Две имплементације вишедимензионалних низова су различите у погледу потрошње складишта. Док би прави 2Д низ имао м редака од н елемената, један назубљени низ може имати м редака, а сваки има различит број елемената. То доводи до минимално изгубљеног простора за скупове података. Дакле, ниже назубљени низ је потпуно у реду:

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

Ако би се исти скуп података имплементирао у истинску 2Д матрицу, то би било на сљедећи начин:

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

Операције на 2Д низовима у Ц #

Ево неких операција на 2Д низовима даним у наставку:

1. Конструишите Ц # 2Д низ

Погледајмо начин како декларисати 2Д низ у Ц # и други начин како не декларисати 2Д низ у Ц #.

Како да?

Права 2Д Арраи имплементација у Ц # започиње декларацијом Арраи. Изгледа испод:

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

Број зареза у дефиницији одређује димензију низа. Имајте на уму да не можете одредити величину поља у декларацији поља. Мора се обавити током иницијализације низа.

Како не?

Лако се збунити између имплементација 2Д матригова и назубљених низова. Наглављена декларација матрице изгледа испод:

int()() jagged array;

2. Иницијализирајте Ц # 2Д низ

Следећи корак је иницијализација 2Д матрице коју смо управо прогласили. Постоји неколико начина за то.

Коришћење новог оператера

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

Иницијализација са вредностима

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

Без новог оператера

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

3. Прочитајте елементе из Ц # 2Д матрице

Прочитајте један елемент

Следећа операција је читање елемената из 2Д матрице. Пошто је 2Д матрица матрица мкн елемената, сваки елемент има одређену комбинацију индекса реда и ступаца-индекса. Елементима можемо приступити пружањем индекса редова и индекса ступаца у индексу. Пример је доле:

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'

Напомена - Индекси редова и ступаца почињу од 0. Дакле, положај индекса (0, 0) је први елемент, а (м-1, н-1) последњи елемент матрице.

Прочитајте све елементе

Али, горња метода нам даје вредност једног елемента у низу. Како ћемо прећи читав низ да бисмо прочитали сваки његов елемент? Једноставно решење је петљати кроз читав низ користећи угнијежђене за / вхиле петље.

Код

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

Излаз

Метода ГетЛенгтх ()

Добро. Али, горњи пример делује само кад унапред знам број елемената у низу. Шта ако је мој низ динамичан? Како могу прећи све елементе динамичког низа? Ево нам помаже ГетЛенгтх метода.

инт арр2Д.ГетЛенгтх (0); // враћа прву димензију (редови)

инт арр2Д.ГетЛенгтх (1); // враћа другу димензију (ступци)

Код

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

Излаз

Снага сваке петље

Линија за сваку петљу извршава скуп наредби за сваки елемент матрице. Ово је врло моћан механизам за петље и препоручује се употреба јер је ефикаснији од традиционалног за петљу.

Код

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

Излаз

4. Уметните елементе у Ц # 2Д низ

Сада ћемо видети пример како уметнути елементе у Ц # 2Д Арраи. Идеја је прелистати сваку позицију низова и доделити јој вредност.

Код

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

Излаз

5. Ажурирајте елементе у Ц # 2Д низу

Ажурираћемо нашу матрицу да множимо сваки елемент са 2. Идеја је прећи сваку позицију матрице и ажурирати вредност коју држи.

Код

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

Излаз

6. Избришите елементе из Ц # 2Д матрице

Ово је лукава операција. Није могуће избрисати нити један елемент из праве Ц # 2Д матрице. Брисање појединог елемента ометаће димензије низа тако да више није матрица. Ц # то не дозвољава ако није назубљени низ.

Па, шта је решење? Да ли ћемо избрисати цео ред или цео ступац? Не, ни Ц # то не би дозволио. Низ се фиксира у величини када је деклариран или иницијализиран. Има додељених бајтова за поправак меморије. То не можемо да променимо у време извођења.

Овде је решење створити нови низ без елемената које желимо да избришемо.

Код

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

Излаз

Закључак

Стога смо видели како се 2Д Арраи имплементира у Ц # и које су различите ЦРУД операције на којима можемо изводити. Такође смо научили разлику између праве 2Д имплементације и назобаног низа. Постоји много више метода доступних у Ц # који помажу програмерима да лагано раде са Арраисима. Погледајте их на МСДН документима.

Препоручени чланци

Ово је водич за 2Д поља у Ц #. Овдје ћемо разговарати о концепту назубљених низова, заједно с операцијама на 2Д низовима у Ц #. Такође можете погледати следеће чланке да бисте сазнали више -

  1. 2Д низови на Јави
  2. 2Д Арраис Ин Питхон
  3. Низи у Ц #
  4. Низи у Ц ++
  5. Низи у ПХП-у
  6. 2Д графика на Јави
  7. Како низови и пописи раде у Питхону?
  8. Вишедимензионални низови у Ц ++ са примерима
  9. 2Д арраи у ПХП-у

Категорија: