Файл: Особенности и примеры использования массивов при разработке программ..pdf
Добавлен: 31.03.2023
Просмотров: 354
Скачиваний: 6
50 => 60,
"drugiVasi" => array(
"good" => array(
"Petrov" => "Petya"
"Ivanov" => "Ivan"
)
"sogood" => array(
"Sidorov" => "Sidor"
"Maria" => "Ivan"
)
);
$numbers = [20, -3, 50, -99, 55]; - пример числового массива
print_r ($numbers[1]); - обращаемся ко второму элементу массива
Полезные функции в PHP для работы с массивами
Одной из первых таких функций является array_combine(), которая создаёт новый массив из двух существующих: первый использует для создания ключей, второй в качестве значений:
$keys = ['sky', 'grass', 'orange']; - здесь мы инициализируем 1 массив
$values = ['blue', 'green', 'orange']; - здесь мы инициализируем 2 массив
$array = array_combine($keys, $values); - создаем 3 массив на основании первых двух
print_r($array); - выводим результат
В результате мы получили ассоциативный массив
// Array
// (
// [sky] => blue - здесь [sky] – индекс, blue – элемент
// [grass] => green
// [orange] => orange
// )
В этом же разрезе нам могут пригодиться функции array_values(). Она извлекает из ассоциативного массива значения; array_keys() возвращает только ключи заданного массива; array_flip() меняет местами ключи и значения:
print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));
Перебор значений массива с помощью цикла:
$arrays = [[1, 2], [3, 4], [5, 6]]
foreach ($arrays as list($a, $b)) {
$c = $a + $b;
echo($c . ', '); // 3, 7, 11,
}
С помощью функции array_sum() можно посчитать сумму элементов массива; array_product() перемножит все значения; array_reduce() позволит применить свою собственную формулу:
$numbers = [1, 2, 3, 4, 5];
echo(array_sum($numbers)); // 15
echo(array_product($numbers)); // 120
Генерация массивов. $bind = array_fill(0, 5, '?');
Удаление элементов из массива и удаление массивов.
unset($arr[5]); - удаляем элемент из массива
unset($arr); - удаляем массив целиком
Функция sort() сортирует элементы массива в возрастающем порядке и присваивает новые ключи элементам массива. Разновидности сортировки в зависимости от префиксной буквы:
- asort(), сортировка, сохраняющая отношения между ключами и значениями
- ksort(), сортировка по ключам
- rsort(), сортировка в прямом/обратном порядке
Работа с массивами в C
При решении задач с большим количеством данных одинакового типа использование переменных с различными именами, не упорядоченных по адресам памяти, затрудняет программирование. В подобных случаях в языке Си используют массивы. С точки зрения языка Си – языка низкого уровня, сильно приближенного к «железу» компьютера
Массив — это непрерывный участок памяти, содержащий последовательность объектов одинакового типа, обозначаемый одним именем.
Длина массива – количество байт, отводимое в памяти для хранения всех элементов массива.
Инициализация массива:
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; - массив arr содержит 10 элементов, со значениями от 0 до 9
#include <stdio.h>
int main()
{
int arr[] = { 5, 4, 3, 2, 1, 0, -1 }; - массив arr содержит 7 элементов
printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
getchar();
return 0;
}
Многомерный массив.
#include <stdio.h>
int main()
{
int a[2][3] = { 1, 2, 3, 4, 5, 6 };
printf("%d %d %d\n", a[0][0], a[0][1], a[0][2]);
printf("%d %d %d\n", a[1][0], a[1][1], a[1][2]);
getchar();
return 0;
}
В отличие от рассмотренного выше языка PHP, в C нет такого обилия встроенных функций по работе с массивами. Но по большому счету это не вызывает каких-либо неудобств. Все прекрасно делается с помощью условий и циклов. Массив в C должен иметь константный размер. Это значит, что невозможно, например, запросить у пользователя размер, а потом задать этот размер массиву.
В некоторых случаях можно узнать размер массива с помощью функции sizeof.
#include <conio.h>
#include <stdio.h>
void main() {
int A[57];
//sizeof возвращает размер всего массива в байтах
int size = sizeof(A) / sizeof(int);
printf("Size of array equals to %d", size);
getch();
}
Массивы небезопасны, так как неправильная работа с индексом может приводить к доступу к произвольному участку памяти. Это особенно актуально при работе с такими системами как автомобили или любые другие где работаем с железом. При работе с массивами, необходимо следить за тем, чтобы счётчик не превышал размер массива и не был отрицательным.
Динамические массивы — это массивы, память для хранения которых выделяется в момент выполнения программы. В отличие от них статические массивы удалить нельзя — они существуют в течение всего времени исполнения программы.
Стандартная библиотека языка Си содержит несколько функций для работы с динамической памятью: malloc, free
Работа с массивами в Lua
Чтобы создать массив, достаточно перечислить в фигурных скобках значения его элементов:
arr = {“Вася”, “Петя”, “Федя”};
А вот так инициализируется пустой массив: arr = {};
Еще можно так заполнить массив:
arr [1] = " Вася ";
arr [2] = " Петя ";
arr [3] = " Федя ";
Особенностью языка Lua можно назвать то, что массивы индексируются начиная с 1, а не 0, как в большинстве языков программирования.
arr = {[1]=“Вася”, [2]=“Петя”, [3]=“Федя”}; – это выражение эквивалентно тому, что находится выше.
Оператор получения длины #, применённый к массиву, возвращает его максимальный индекс (или размер): max = #arr
Обращение к элементу массива: print(arr[1]); // Вася
Для получения всех элементов массива, могут использоваться конструкции for, foreach:
for i=1,10 do
arr[i] = nil;
end
Пример двумерного массива:
Arr3 = {{"Вася","Пупкин",},"Петя","Федя"};
Характерной особенностью языка Lua, отличающей его от рассмотренных выше языков, является то, что массивы как таковые используются реже, чем производные от них – таблицы. В отличие от массивов элементы таблицы индексируются переменными. А значением может быть абсолютно любой тип данных Lua, да и вообще всё что угодно.
Работа с массивами в Ruby
В Ruby массивы могут содержать любые типы данных, включая числа, строки и другие объекты Ruby. Пример массива в Ruby по синтаксису ничем не будет отличаться от аналогичного примера в РНР:
arr = [
"Вася",
"Петя",
"Федя",
"Маруся"
] или в одну строку arr = ["Вася", "Петя", "Федя", "Маруся"]
Здесь стоит обратить внимание на особенность языка – после массива не ставится точка с запятой.
arr = [] – пример пустого или безразмерного массива
Записи можно иупростить:
days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday} – эта запись аналогична следующей:
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
Следующий пример содержит разные типы данных в массиве, включая другой массив:
arr = [
"Вася",
null,
"Возраст",
30,
[
"пол",
"мужской",
]
3,1415
]
Индексы в Ruby начинаются с 0. Соответственно доступ к элементам массива будет выглядеть следующим образом: print arr[3] // получим 30
Методы, использующиеся при работе с массивами:
Чтобы найти последний элемент в массиве, используется индекс -1.
Чтобы узнать количество элементов в массиве, используется метод length. Пример: arr.length // 6
Чтобы узнать индекс определенного элемента в массиве, используется метод index().
Также Ruby предоставляет методы first и last, которые выводят первый и последний элемент массива без индекса.
При запросе несуществующего индекса программа выдаст nil.
arr [10] выдаст nill, потому что в массиве такого индекса нет. Вообще, любой язык программирования, так или иначе, обрабатывает запрос к несуществующему индексу в массиве. Как правило, все выдают значение nill/null в этой ситуации. Одним из исключений будет являться язык С. Так как это язык низкого уровня, оперирующий с адресами в памяти, программа, написанная на нем вылетит с ошибкой.
Чтобы добавить элемент в конец массива используется метод push.
Добавить элемент в начало массива можно с помощью метода unshift.
Чтобы удалить определенный элемент из массива, используются методы delete или delete_at. Метод pop() удаляет последний элемент в массиве.
При работе с массивами также особое значение занимают циклы. Прохождение по массиву без этих конструкций превратилось бы в очень трудоемкий и тупой процесс.
Работа с массивами в Haskell
Прежде чем приступать к рассмотрению массивов в таком многогранном языке, мы бы хотели сразу оговориться, что массивы здесь представлены двумя видами – это списки и кортежи. О них мы и поговрим немножко.
В идеале массивы в функциональном языке следовало бы рассматривать просто как функции из индексов в значения, но с прагматической точки зрения для гарантии эффективного доступа к элементам массива мы должны быть уверены, что мы можем воспользоваться специальными свойствами этих функций.
Список — это стандартный тип, характеризующий уже не просто данные, но структуру данных. Эта структура представляет собой набор данных одного типа. Одного типа – это надо запомнить. Это главное отличие от массивов, где типы могут быть разные.
Вот пример списка: [1.3, 45.7899] – очень похоже на LUA, не правда ли?
В стандартной Haskell-библиотеке существует отдельный модуль Data.List, включающий широкий набор функций, работающих со списком. Откроем модуль Main и импортируем в него модуль Data.List:
module Main where
import Data.List
main :: IO ()
main = putStrLn (head ["Вася", "Петя", "Федя"])
// head возвращает первый элемент списка т.е. «Вася».
main = print (tail ["Вася", "Петя", "Федя"])
// tail возвращает остальные элементы списка.
Список целых чисел от 1 до 1000
main :: IO ()
main = print tenNumbers
where tenNumbers = [1..1000]
Здесь хотелось бы отметить, что списки в Haskell в отличие от массивов в других языках, они неизменны, тобишь добавить или удалить что-либо из списка после его создания не получится, только если создать на основе старого списка список новый.
['a'..'z'] = "abcdefghijklmnopqrstuvwxyz" – алфавит
Кортеж — ещё одна стандартная структура данных, но, в отличие от списка, она может содержать данные как одного типа, так и разных. Эта структура
Структуры, способные содержать данные разных типов, называют гетерогенными (в переводе с греческого: «разного рода»).
("Миша", "2019", "Курсач", "4" )
Со списками можно делать много всего, а вот с кортежами — не очень. Самые частые действия — собственно формирование кортежа и извлечение хранящихся в нём данных.
Работа с массивами в Go
Массив в языке Go — это нумерованная последовательность элементов одного типа, с фиксированной длинной.
package main
import "fmt"
func main() {
var arr [5]int
fmt.Println("emp:", arr)
В этом примере мы создали массив arr, который будет содержать именно 5 элементов типа int. Тип данных и размер массива - обязательны при объявлении массива. По-умолчанию массив имеет нулевые значения элементов. Для int это 0.
a[4] = 100
fmt.Println("set:", a) - устанавливаем значение элемента в массиве
fmt.Println("get:", a[4]) - получаем значение элемента массива
fmt.Println("len:", len(a)) -Встроенная функция len возвращает размер массива
b := [5]int{1, 2, 3, 4, 5} – инициализируем массив одной строкой
fmt.Println("dcl:", b)
var twoD [2][3]int - создаем многомерный массив
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d: ", twoD)
}
Работа с массивами в Rust
В языке программирования Rust, так же как и в языке Go, массивы представлены набором объектов одного типа с фиксированной длинной. Массивы создаются с помощью квадратных скобок [].
let arr = [1, 2, 3]; - инициализируем массив
for arr in &arr {
println!("Массив: {}", arr);
} - вывод элементов массива
В массиве можно создавать элементы только одного типа. То есть нельзя создавать строку и числа в одном массиве.
Кортеж похож на массив, только может хранить значения разных типов. Элементы кортежа указываются между круглыми скобками ().
let tuple2 = (2, "Вася"); - создание кортежа
println!("Число: {}", tuple2.0);
println!("Строка: {}", tuple2.1);
} – вывод элементов кортежа
let ones = [1; 20]; - создаем 20 единичек
Работа с массивами в Java
Как и во многих других языках в Java массивы – это именованное множество переменных одного типа. Чтобы сослаться на определённый элемент в массиве нужно знать имя массива в соединении с целым значением, называемым индексом. Индекс указывает на позицию конкретного элемента относительно начала массива. Обратите внимание, что первый элемент будет иметь индекс 0, второй имеет индекс 1, третий - индекс 2 и так далее.