Массивы

Последнее обновление: 28.08.2022

Массивы представляют набор элементов, при этом все элементы набора должны представлять один и тот же тип данных.

В Rust массив можно определять различными способами. Простейшее формальное объявление массива:

let название_массива: [тип_данных; размер];

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

Например, объявление массива, который имеет 7 элементов типа i32:

let numbers: [i32; 7];

Фактически выражение [i32; 7] выступает в качестве типа массива. То есть фактически мы определили переменную numbers и указали ее тип - [i32; 7] - массив из 7 элементов типа i32. Но такая переменная еще неинициализирована. Поэтому использовать мы ее не можем.

Для инициализации переменной массива необходимо ей присвоить набор значений. Простейшее определение с инициализацией:

let переменная_массива: [тип_данных; размер] = [элемент1, элемент2, ... элементN];

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

let numbers: [i32; 7] = [1, 2, 3, 5, 8, 13, 21];

В данном случае массив numbers имеет 7 элементов: 1, 2, 3, 5, 8, 13, 21.

Как и в случае с обычной переменной можно сначала объявить переменную, а затем инициализировать ее:

let numbers: [i32; 7];
numbers	= [1, 2, 3, 5, 8, 13, 21];

Также если массив инициализируется при его определении, то можно не указывать тип массива:

let numbers = [1, 2, 3, 5, 8, 13, 21];

В этом случае Rust сам выведет тип - [i32; 7]

Обращение к элементам массива

Для обращения к элементам массива используется их числовой индекс:

название_массива[индекс_элемента]

Каждый элемент массива имеет числовой индекс. Индексация начинается с нуля. То есть первый элемент массива будет иметь индекс 0, второй элемент - индекс 1 и так далее.

Например, выведем на консоль первый и третий элементы массива:

fn main()
{
	let users = ["Tom", "Bob", "Sam"];
	println!("{}", users[0]);	//	Tom
	println!("{}", users[2]);	//	Sam
}

Подобным образом можно не только получить, но и изменять элемент массива. Однако, если мы собираемся изменять элементы массива, то он должен определен с модификатором mut:

fn main(){

	let mut users = ["Tom", "Bob", "Sam"];
	// выводим второй элемент массива
	println!("{}", users[1]);	//	Bob
	// изменяем второй элемент массива
	users[1] = "Bill";
	// снова выводим второй элемент массива
	println!("{}", users[1]);	//	Bill
}

Стоит учитывать, что мы не можем обратиться к несуществующему элементу. Например, выше в примере в массиве есть всего три элемента. Соответственно индексом последнего элемента является число 2. Поэтому к элементам с индексами 3, 4 и больше мы обратиться не можем, так как их просто не существует. Например, в следующем случае при попытке обращения к несуществующему элементу мы столкнемся с ошибкой на этапе компиляции:

fn main(){

	let mut users = ["Tom", "Bob", "Sam"];
	
	users[6] = "Bill";	// !Ошибка - элемента с индексом 6 в массиве users нет
}

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

Перебор массива

Для перебра массива применяется цикл for:

fn main(){

	let users = ["Tom", "Bob", "Sam"];
	for user in users {
		print!("{} ", user);
	}
	
	println!(); // переходим на следующую строку в консоли
	
	let numbers = [1, 2, 3, 5, 8, 13, 21];
	for n in numbers{
		print!("{} ", n);
	}
}

Консольный вывод программы:

Tom Bob Sam
1 2 3 5 8 13 21

Заполнение массива значениями по умолчанию

Массивы также имеют еще одну форму определения:

let название_массива: [тип_данных; размер] = [значение_по умолчанию; размер];

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

let numbers: [i32; 5] = [2; 5];

В данном случае каждый из пяти элементов массива numbers будет иметь значение "2".

Также можно сократь определение массива и не указывать тип:

fn main(){

	let numbers = [2; 5];
	for n in numbers{
		print!("{} ", n);		// 2 2 2 2 2
	}
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850