2,1K подписчиков

Что такое массивы данных в программировании?

296 прочитали

Одна из базовых структур в программировании - «Массив данных» / Array. Массивы используются практически везде, на любых платформах, в любых устройствах и в любых средах разработки. Сложно представить современный компьютерный мир без массивов, настолько повсеместно и широко они распространены. Это такая же универсальная и нужная в программировании вещь, как например сумка или чемодан в бытовом применении.

Массив данных нужен для упорядоченного хранения однотипной информации. Он представляет из себя последовательный набор ячеек для хранения чего-либо. Например - чисел, строк, символов, или других типизованных объектов. Важной отличительной особенностью массива (в общем смысле) является именно однотипность содержимого. То есть, при "создании" массива, в большинстве случаев требуется явно указать, что именно будет храниться внутри него.

Массивы на примере яблок. Пять массивов различного типа яблок, сверху вниз. Каждый массив имеет длину 8 яблок.
Массивы на примере яблок. Пять массивов различного типа яблок, сверху вниз. Каждый массив имеет длину 8 яблок.

Визуализация массива на примере яблок, как на картинке выше. Здесь можно наблюдать пять массивов яблок, каждый из которых имеет длину 8 ячеек. Яблоки можно брать или класть, в общем смысле не нарушая их последовательность. Если яблоко было взято из некоторой "ячейки", то ячейка становится пустой, и туда можно положить какое-то другое яблоко.

Ещё один пример визуализации массива. Представь себе пять небольших пустых чашек, стоящих в ряд. У каждой чашки есть свой номер. Каждая чашка имеет ограниченный размер. В каждую чашку можно положить орех, и потом достать его. Если мы положили орех в чашку номер 3, то она пока занята, и мы это видим. Если мы возьмём орех обратно, то чашка номер 3 снова станет пуста. В одну чашку нельзя положить больше одного ореха. Точно так же, из чашки можно забрать орех только в том случае, если он там уже лежит. Чашки нельзя перемещать друг относительно друга, и в целом они ведут себя достаточно предсказуемым образом - стоят в ряд, и каждая из них может или содержать орех, или быть пустой.

Как устроен массив данных ⚙️

Линейный типизованный массив должен соответствовать двум важным условиям. Это - однотипность данных, и последовательность данных. Иными словами, массив чисел должен содержать только числа. Массив строк должен содержать только строки. Массив длиной 5 ячеек имеет 5 последовательных ячеек, одну за другой.

Элементы массива должны располагаться "один за другим". То есть, ячейки массива должны иметь "номера", и у программиста должна быть возможность обращения к этим ячейкам по их номерам.

Типовое устройство линейного массива. В данном случае мы видим пример организации числового массива типа int, размером 9 ячеек. В ячейке номер 1 записано значение 2. В ячейке номер 3 записано значение 4ю
Типовое устройство линейного массива. В данном случае мы видим пример организации числового массива типа int, размером 9 ячеек. В ячейке номер 1 записано значение 2. В ячейке номер 3 записано значение 4ю

В одну и ту же ячейку нельзя положить сразу несколько чисел. В каждую ячейку в один момент времени помещается только одно, конкретное число. С другой же стороны, мы можем "забрать" число из некоторой ячейки. И тогда, ячейка станет пустой, и доступной для "записи".

Обратите внимание! Номера ячеек внутри массива всегда начинаются с "нуля". То есть, самая первая ячейка массива всегда будет иметь номер "ноль", а не номер "один", как это может показаться с точки зрения привычного мироустройства.

В большинстве языков и сред программирования, для адресации "ячейки" массива используют квадратные скобки. Например, для записи значения в ячейку 40 в массиве с названием MyArray, используется вот такая конструкция:

MyArray[40] = 123123;

Точно такой же синтаксис используется для получения значений из некоторой ячейки.

int arrayValue = MyArray[40];

Для определения длины массива используется команда (свойство) length. Оно возвращает числовую длину массива. В зависимости от языка и среды выполнения, команда length может иметь немного отличный синтаксис. Например, для C# это будет выглядеть вот так:

MyArray.length

Для языка PHP эта же самая команда пишется как count. Вот так:

count(MyArray)

В других языках, название или синтаксис применения этой команды могут так же отличаться. Но в общем и целом, стоит ориентироваться на различные виды команд length или count.

Почему массивы важны и нужны? ☝️

Ответ достаточно прост и очевиден - потому что это самый логичный и интуитивно понятный способ хранения информации. В общем и целом, любые приложения предназначены для решения каких-то конкретных задач. И так уж получилось, что людям привычно сегментировать задачи вокруг каких-то данных одного типа. Например в мессенджере в основном фигурируют текстовые данные, а в соцсетях вроде ТикТока - видеоданные.

Согласись, гораздо удобнее хранить однотипные данные последовательно - "в рядок", чем делать то же самое в беспорядочном или каком-то другом запутанном виде. Именно для организации удобного и предсказуемого хранения данных нужны массивы. Как правило они максимально линейны, понятны и эффективны в своей простоте.

Страница автора в ТикТок - отличный пример линейного массива "Видео". С программной точки зрения, каждое видео это отдельный упорядоченный элемент массива.
Страница автора в ТикТок - отличный пример линейного массива "Видео". С программной точки зрения, каждое видео это отдельный упорядоченный элемент массива.

Открывая канал с новостями, или чат в Телеграмме, мы видим список сообщений. В таком случае - сообщения представляют собой массив текстовых записей. Открывая ТикТок, мы видим список видео - то есть массив видеозаписей.

Если мы погрузимся на следующий уровень системы, то увидим что каждое текстовое сообщение - это строка, которая на самом деле представляет из себя массив отдельных символов. А если посмотрим на отдельно взятое видео - то увидим "под капотом" массив типа byte.

В конечном итоге, практически все комплексные типы данных сводятся к массивам типа byte, которые "обёрнуты" в вышестоящие классы, для упрощения доступа.

Статические и динамические массивы 📦

Помимо типов данных, условно говоря, массивы делятся на статические и динамические. Их главное отличие заключается в том, может ли массив менять свой размер в ходе выполнения программы.

Статические массивы, как в примере с чашками, не могут изменять свой размер. Это значит, что количество элементов фиксируется на момент объявления массива внутри программы. Массив не обязательно должен содержать какие-то элементы на начальном этапе. Но в момент своего объявления программист должен принципиально решить - будет ли массив фиксированного размера, или нет.

С точки зрения прикладного программирования, динамические массивы имеют большую популярность. Они позволяет добавлять или убавлять элементы на любом этапе работы с программой. Тем не менее, если заглянуть "под капот" динамического массива, то часто мы увидим там набор статических массивов, которые ловко контролируются специальным программным кодом.

Как создать массив? 👨‍💻

В зависимости от языка программирования, синтаксис для создания массива будет несколько отличаться. Но это не является какой-то проблемой, поскольку с технической точки зрения, в конечном итоге, массив будет работать одинаковым и достаточно предсказуемым образом в любой среде программирования.

Работа с массивами в языке C#

Документация на learn.microsoft - подробная статья по массивам в C#. И так же, простой пример создания и записи данных в массив на C#:

// Создаём массив чисел длиной 5 ячеек:
int[] numbers_array= new int[5];
//Записываем в ячейку номер 2 цифру 94
numbers_array[1] = 94;
// Создаём массив строк длиной 5 ячеек:
string[] stringArray = new string[6];
//Записываем в ячейку 5 строку "Привет"
stringArray[4] = "Привет!";

В языке C# и платформе .NET есть не только статические, но и динамические массивы. В случае с динамическими массивами, их размер может быть неизвестен на момент инициализации. Вот статья с техническими подробностями и документацией по динамическим массивам List<T>.

Работа с массивами в языке PHP

Документация на php.net - подробная статья по массивам в PHP.

Язык PHP менее строг в вопросах работы с массивами. Здесь можно создавать массив без явного указания типа данных. В процессе добавления элементов, среда выполнения программы самостоятельно позаботится о правильном хранении значений внутри ячеек.

//Пример создания массива строк
$array = array("foo", "bar", "hallo", "world");
//Пример создания массива чисел:
$numbers = Array(1,2,3,4,5);
//Пример замены числа 3 на число 88 в массиве чисел
$numbers[2] = 88;

Работа с массивами в языке JavaScript

JavaScript - самый неприхотливый язык в плане синтаксиса и типизации. "Делай что хочешь, и тебе за это ничего не будет" - примерно так можно описать подход к типизации и контролю кода со стороны среды выполнения. Но тем не менее, JS используется в большей части существующих сайтов. Так что, всё хорошо! 😄

Подробная статья по массивам в JS с сайта learn.javascript. Так же, примеры работы с массивами в JS:

//Создаём массивы, два способа:
let arr = new Array(2);
let arr2 = [];
//Записываем значения в массив
arr[0] = 10; arr[1] = 20;
arr2.push("asdasd"); arr2.push("HEHEHE");
//Создаём еще один массив сразу со строками внутри
let fruits = ["Яблоко", "Апельсин", "Слива"];

Немного философии про массивы 👨‍🦳

Есть интересная точка зрения о том, что во вселенной принципиально боятся две силы - сила хаоса и сила порядка. При этом, сила хаоса стремится разрушить мир и вернуть его к началу начал. А сила порядка - организовать мир простым и удобным способом. Постоянное противодействие этих сил представляет из себя баланс, великую гармонию и хрупкую точку равновесия, Инь и Янь.

С этой точки зрения, массивы данных являются классическим инструментом силы упорядочивания. И в волшебном мире программирования они используется буквально везде. Даже эта статья состоит из массивов данных, которые аккуратно хранятся в массивах ячеек внутри памяти одного из серверов.

Освоение и умелая работа с массивами является важнейшим навыком любого программиста. Поэтому, настоятельно рекомендую уделить этому вопросу должное внимание.

Массивы - классический инструмент упорядочивания данных в языках программирования. Освойте их, и постигните Дзен.
Массивы - классический инструмент упорядочивания данных в языках программирования. Освойте их, и постигните Дзен.

🔥 Понравилось? Подпишись! Победим восстание роботов вместе! 🔥

Одна из базовых структур в программировании - «Массив данных» / Array. Массивы используются практически везде, на любых платформах, в любых устройствах и в любых средах разработки.-5

🚀 P.S. Ты можешь круто поддержать меня и проект "Войти в IT" на boosty! Я публикую там более эксклюзивный и профессиональный, иногда немного личный контент. Хочешь посмотреть как я выгляжу в реальной жизни? Тогда жми: Ссылка 🚀

P.S.2 У меня ещё есть Telegram-канал. Там посты чуть попроще, и чуть повеселей. Ссылка