Вступ у двовимірні масиви в C #
Двовимірні масиви - це сукупність однорідних елементів, що перетинаються на кілька рядків і стовпців, приймаючи форму матриці. Нижче наведено приклад 2D масиву, який має m рядків і n стовпців, створюючи таким чином матрицю конфігурації mxn.
( a1, a2, a3, a4, …, an
b1, b2, b3, b4, …, bn
c1, c2, c3, c4, …, cn
.
.
.
m1, m2, m3, m4, …, mn )
Концепція зубчастих масивів
Jagged Array - це масив масивів. Зазубровані масиви - це по суті кілька масивів, зв'язаних між собою, утворюючи багатовимірний масив. Двовимірний зубчастий масив може виглядати приблизно так:
( ( a1, a2, a3, a4, …, an ),
( b1, b2, b3, b4, …, b20 ),
( c1, c2, c3, c4, …, c30 ),
.
.
.
( m1, m2, m3, m4, …, m25 ) )
Зауважте, що всі рядки нерівного масиву можуть містити або не містити однакову кількість елементів.
Справжні 2D масиви проти зазубрених масивів
Зазубровані масиви є абсолютно іншими, ніж справжній 2D масив з точки зору реалізації. Важливо зрозуміти, як C # реалізує як багатовимірні масиви, так і нерівні масиви.
Мови програмування відрізняються своєю реалізацією багатовимірних масивів. Деякі мови програмування, такі як C, C ++, C #, Fortran тощо, підтримують справжні 2D-масиви. Хоча є й інші, які моделюють цю поведінку з масивами масивів, які називаються нерівними масивами. Отже, чим справжній двовимірний масив відрізняється від зубчастих масивів?
Дві реалізації багатовимірних масивів відрізняються за рівнем споживання сховища. У той час як справжній 2D масив матиме m рядків з n елементів кожен, нерівний масив може мати m рядків, кожен з яких має різну кількість елементів. Це призводить до мінімально витраченого місця для наборів даних. Таким чином, нижче зазублений масив ідеально добре:
int()() jagged array = ( (1, 2, 3, 4),
(5, 6, 7),
(8, 9) )
Якби той самий набір даних мав би бути реалізований у справжньому 2D-масиві, це було б, як показано нижче:
int(, ) multiDimArray = ( 1, 2, 3, 4
5, 6, 7, 0
8, 9, 0, 0 )
Операції на 2D-масивах у C #
Ось деякі операції над 2D-масивами, наведеними нижче:
1. Побудувати масив C # 2D
Давайте подивимось, як оголосити 2D масив у C # та інший спосіб, як не оголосити 2D масив у C #.
Як?
Справжня реалізація 2D масиву в C # починається з декларації масиву. Це виглядає приблизно так:
int(, ) arr2D;
string(, ) arr2D_s;
Кількість коми у визначенні визначає розмірність масиву. Зауважте, що ви не можете вказати розмір масиву в декларації масиву. Це потрібно зробити під час ініціалізації масиву.
Як не робити?
Легко заплутатися між реалізаціями 2D-масивів та нерівними масивами. Нерівна заява масиву виглядає нижче:
int()() jagged array;
2. Ініціалізуйте масив C # 2D
Наступний крок - ініціалізація 2D-масиву, який ми щойно оголосили. Існує кілька способів зробити це.
Використання нового оператора
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. Прочитайте елементи з масиву C # 2D
Прочитайте один елемент
Наступною операцією є зчитування елементів з 2D масиву. Оскільки 2D масив є матрицею mxn елементів, кожен елемент має призначені комбінації рядків-індексів та стовпців-індексів. Ми можемо отримати доступ до елементів, надавши індекс-рядок та індекс стовпців. Приклад нижче:
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'
Прочитайте всі елементи
Але, описаний вище метод дає нам значення одного елемента в масиві. Як ми можемо пройти весь масив, щоб прочитати кожен його елемент? Просте рішення - це прокручування всього масиву з використанням вкладених циклів для / while.
Код
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");
)
)
)
Вихід
Метод GetLength ()
Добре. Але, наведений вище приклад працює лише тоді, коли я заздалегідь знаю кількість елементів у масиві. Що робити, якщо мій масив динамічний? Як я проходжу всі елементи динамічного масиву? Тут нам допомагає метод GetLength.
int arr2D.GetLength (0); // повертає перший вимір (рядки)
int arr2D.GetLength (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");
)
)
)
Вихід
Потужність для кожного циклу
Цикл for-every виконує набір команд для кожного елемента масиву. Це дуже потужний циклічний механізм і його настійно рекомендується використовувати, оскільки він є більш ефективним, ніж традиційний для циклу.
Код
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. Вставте елементи в масив C # 2D
Тепер давайте подивимось приклад того, як вставляти елементи в масив C # 2D. Ідея полягає в тому, щоб пройти кожну позицію масиву і призначити йому значення.
Код
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. Оновлення елементів у масиві C # 2D
Ми оновимо наш масив, щоб помножити кожен елемент на 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. Видаліть елементи з масиву C # 2D
Це хитра операція. Видалити один елемент із справжнього масиву C # 2D неможливо. Видалення одного елемента порушить розміри масиву таким чином, що він більше не буде матрицею. C # не дозволяє цього, якщо це не зубчастий масив.
Отже, яке рішення? Чи видаляємо ми весь рядок або весь стовпець? Ні, C # також не дозволить цього. Масив фіксується за розміром при оголошенні або ініціалізації. Він має виправлені байти пам'яті. Ми не можемо змінити це під час виконання.
Тут є рішення створити новий масив без елементів, які ми хочемо видалити.
Код
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");
)
)
)
Вихід
Висновок
Таким чином, ми бачили, як 2D масив реалізується в C # і які різні операції CRUD ми можемо виконувати на ньому. Ми також дізналися різницю між справжньою двовимірною реалізацією та нерівним масивом. У C # доступно набагато більше методів, щоб допомогти розробникам легко працювати з масивами. Перевірте їх у документах MSDN.
Рекомендовані статті
Це посібник із 2D-масивів у C #. Тут ми обговорюємо концепцію нерівних масивів разом з операціями над 2D масивами в C #. Ви також можете переглянути наступні статті, щоб дізнатися більше -
- 2D масиви на Java
- 2D масиви в Python
- Масиви в C #
- Масиви в C ++
- Масиви в PHP
- 2D графіка на Java
- Як працюють масиви та списки в Python?
- Багатовимірні масиви в C ++ з прикладами
- 2D масиви в PHP