К статьям

Работа с массивами

8 мин


Конструкторы

Создать массив можно несколькими способами:

1. По количеству элементов

Новый Массив(<КоличествоЭлементов1>, <КоличествоЭлементов2>, ..., <КоличествоЭлементовN>) 

  • <КоличествоЭлементов1>, <КоличествоЭлементов2>, ..., <КоличествоЭлементовN> (необязательный) - Число - количество элементов в соответствующем измерении

Возвращает массив.

Если не указывать количество, будет создан пустой массив.

ПустойМассив = Новый Массив;

Если заполнить первый параметр, то будет создан массив с определенным количеством.

СтороныСвета = Новый Массив(4);

Стороны Света - массив, содержащий 4 пустых элемента.

Массив может содержать в качестве элементов произвольные объекты, в том числе другие массивы. Если заполнить первый и последующие параметры, то получим массив, в котором содержится <КоличествоЭлементов1> массивов, в каждом из которых <КоличествоЭлементов2> массивов и т. д., последнее <КоличествоЭлементовN> - количество элементов последнего массива.

Иерархия = Новый Массив(1, 2, 3);

В массиве «Иерархия» содержится один массив, внутри которого 2 массива, внутри каждого из 2-х массивов содержится 3 элемента.

2. На основании фиксированного массива

Фиксированный массив - неизменяемый массив. В нем нельзя изменить количество элементов после создания. 

Пусть имеется фиксированный массив СписокПолей, тогда 

ПолныйСписокПолей = Новый Массив(СписокПолей);

ПолныйСписокПолей - массив с элементами СписокПолей.

К элементам массива можно обращаться через оператор [..]. Обратившись к элементу, можно работать с ним как с переменной.

СтороныСвета = Новый Массив(4); // создан массив с 4 пустыми элементами типа Неопределено

ВторойЭлемент = СтороныСвета[1]; // обращение ко 2 элементу, цифра 1 т.к счет идет с 0

СтороныСвета = Новый Массив(2);
СтороныСвета[0] = "Север";
СтороныСвета[1] =
"Юг";
Сообщить
(СтороныСвета[1]); // Юг

Методы

1. Добавить(<Значение>)

  • <Значение> (необязательный) - Произвольный, если значение не указано, то Неопределено.

Добавляет элемент в конец массива.

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север");

СтороныСвета.Добавить("Юг");

Юг = СтороныСвета[1];

Сообщить(Юг); // Юг

2. ВГраница()

Возвращает наибольший индекс в массиве. Если количество 0, то возвращает -1

СтороныСвета = Новый Массив(4); 

НаибольшийИндекс = СтороныСвета.ВГраница();

Сообщить(НаибольшийИндекс); // 3

3. Вставить(<Индекс>, <Значение>)

  • <Индекс> (необязательный) - Число, индекс куда будет вставлено Значение

Вставляет значение в массив по указанному индексу

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север");

СтороныСвета.Добавить("Юг");

 

СтороныСвета.Вставить(1, "Запад"); 

 

Сообщить(СтороныСвета[0]); // Север

Сообщить(СтороныСвета[1]); // Запад

4. Количество()

Возвращает количество элементов массива

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север");

СтороныСвета.Добавить("Юг");

 

КоличествоЭлементов = СтороныСвета.Количество();

Сообщить(КоличествоЭлементов); // 2

5. Найти(<Значение>)

Возвращает индекс первого найденного элемента, если элемента нет, то Неопределено

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север");

СтороныСвета.Добавить("Юг");

 

ИндексЭлементаЮг = СтороныСвета.Найти("Юг"); 

Сообщить(ИндексЭлементаЮг); // 1

6. Очистить()

Удаляет все элементы массива

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север");

СтороныСвета.Добавить("Юг");

 

СтороныСвета.Очистить(); 

КоличествоЭлементов = СтороныСвета.Количество();
Сообщить(КоличествоЭлементов); // 0

7. Получить(<Индекс>)

  • <Индекс> (обязательный) - Число - индекс элемента

Получает произвольное значение аналогично оператору [..]. 

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север");

СтороныСвета.Добавить("Юг");

 

Юг = СтороныСвета.Получить(1); 

Сообщить(Юг)

8. Удалить(<Индекс>)

  • <Индекс> (обязательный) - Число - индекс элемента

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

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север"); // Индекс - 0

СтороныСвета.Добавить("Юг"); // Индекс - 1

СтороныСвета.Добавить("Запад"); // Индекс - 2

СтороныСвета.Добавить("Восток"); // Индекс - 3

 

СтороныСвета.Удалить(1);

 

Сообщить(СтороныСвета[0]); // Север, Индекс - 0

Сообщить(СтороныСвета[1]); // Запад, Индекс - 1

Сообщить(СтороныСвета[2]); // Восток, Индекс - 2

9. Установить(<Индекс>, <Значение>)

 

  • <Индекс> (обязательный) - Число - индекс элемента.
  • <Значение> (обязательный) - Произвольный - присваиваемое значение.

Устанавливает у элемента с <Индекс> значение <Значение>, аналогично оператору [..]

СтороныСвета = Новый Массив(2);

СтороныСвета.Установить(1, "Юг");

Юг = СтороныСвета[1];

Сообщить(Юг); // Юг

Фиксированный массив

У фиксированного массива 4 метода: ВГраница(), Количество(), Найти(<Значение>), Получить(<Индекс>). Работают они аналогично. В фиксированном массиве нельзя удалить, установить или как-то иначе изменить значения.

Фиксированный массив создается на основе обычного массива.

Счета = Новый Массив;

Счета.Добавить("50");

Счета.Добавить("51");

 

АктивныеСчета = Новый ФиксированныйМассив(Счета);

 

Для Каждого Счет Из АктивныеСчета Цикл

    Сообщить(Счет);

КонецЦикла;

Примеры

1. Обойти все элементы массива по порядку

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север"); 

СтороныСвета.Добавить("Юг"); 

СтороныСвета.Добавить("Запад"); 

СтороныСвета.Добавить("Восток"); 

 

Для Каждого Направление Из СтороныСвета Цикл

    Сообщить(Направление);

КонецЦикла;

 2. Обойти элементы массива начиная с последнего

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север"); 

СтороныСвета.Добавить("Юг"); 

СтороныСвета.Добавить("Запад"); 

СтороныСвета.Добавить("Восток"); 

 

НаибольшийИндекс = СтороныСвета.ВГраница();

Для Индекс = 0 По НаибольшийИндекс Цикл

    Направление = СтороныСвета[НаибольшийИндекс - Индекс];

    Сообщить(Направление);

КонецЦикла;

 3. Удалить каждый второй элемент массива.

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

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север"); 

СтороныСвета.Добавить("Юг");   

СтороныСвета.Добавить("Запад");  

СтороныСвета.Добавить("Восток"); 

 

НаибольшийИндекс = СтороныСвета.ВГраница();

Счет = 0;

 

Для Индекс = 0 По НаибольшийИндекс Цикл  

    Счет = Счет + 1;    

    Если Счет = 2 Тогда         

        СтороныСвета.Удалить(НаибольшийИндекс - Индекс);

        Счет = 0;   

    КонецЕсли;  

КонецЦикла;

 

Для Каждого Направление Из СтороныСвета Цикл

    Сообщить(Направление);

КонецЦикла;

4. Удалить дубли из массива

Решение задачи способом создания нового массива без дублей

СтороныСвета = Новый Массив;

СтороныСвета.Добавить("Север"); 

СтороныСвета.Добавить("Юг"); 

СтороныСвета.Добавить("Юг");    

СтороныСвета.Добавить("Запад");  

СтороныСвета.Добавить("Восток"); 

СтороныСвета.Добавить("Восток"); 

 

СтороныСветаБезДублей = Новый Массив;

 

Для Каждого Направление Из СтороныСвета Цикл

    Если СтороныСветаБезДублей.Найти(Направление) = Неопределено Тогда

        СтороныСветаБезДублей.Добавить(Направление);
        
Сообщить(
Направление);

    КонецЕсли;

КонецЦикла;

 5. Отсортировать элементы массива

У массива нет метода сортировки, поэтому можно сделать сортировку, используя известные алгоритмы сортировки (например, «Пузырьковая сортировка»), или использовать другие объекты, в которых метод сортировки присутствует. 

Числа = Новый Массив;

Числа.Добавить(3); 

Числа.Добавить(5); 

Числа.Добавить(0);    

Числа.Добавить(1);  

Числа.Добавить(4); 

Числа.Добавить(2); 

 

СписокЗначений = Новый СписокЗначений;

СписокЗначений.ЗагрузитьЗначения(Числа);

СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Убыв); // СписокЗначений.СортироватьПоЗначению(НаправлениеСортировки.Возр);

ЧислаПоУбыванию = СписокЗначений.ВыгрузитьЗначения();

 

Для Каждого Число Из ЧислаПоУбыванию Цикл

    Сообщить(Число);

КонецЦикла;

6. Дополнить массив (ТоварыМагазин) уникальными значениями (из ТоварыСклад)

ТоварыМагазин = Новый Массив;

ТоварыМагазин.Добавить("Ручка");

ТоварыМагазин.Добавить("Книга");

ТоварыМагазин.Добавить("Стол");

 

ТоварыСклад = Новый Массив;

ТоварыСклад.Добавить("Ручка");

ТоварыСклад.Добавить("Книга");

ТоварыСклад.Добавить("Стол");

ТоварыСклад.Добавить("Стул");

 

Для Каждого Товар Из ТоварыСклад Цикл

    Если ТоварыМагазин.Найти(Товар) = Неопределено Тогда

        ТоварыМагазин.Добавить(Товар);

    КонецЕсли;

КонецЦикла;

 

Для Каждого Товар Из ТоварыМагазин Цикл

    Сообщить(Товар);

КонецЦикла;

7. Найти все элементы первого массива (ТоварыМагазин), не существующие во втором (ТоварыСклад)

ТоварыМагазин = Новый Массив;

ТоварыМагазин.Добавить("Ручка");

ТоварыМагазин.Добавить("Книга");

ТоварыМагазин.Добавить("Стол");

 

ТоварыСклад = Новый Массив;

ТоварыСклад.Добавить("Ручка");

ТоварыСклад.Добавить("Книга");

ТоварыСклад.Добавить("Стол");

ТоварыСклад.Добавить("Стул");

 

Результат = Новый Массив;

Для Каждого Элемент Из ТоварыСклад Цикл

    Если ТоварыМагазин.Найти(Элемент) = Неопределено Тогда

        Результат.Добавить(Элемент);

    КонецЕсли;

КонецЦикла;

 

Для Каждого Элемент Из Результат Цикл

    Сообщить(Элемент);

КонецЦикла;

8. Сформировать матрицу чисел 3 на 3 и вычислить произведение одной из ее диагоналей

// Массив содержащий 3 массива, каждый из которых содержит по 3 элемента

Матрица = Новый Массив(3, 3);

 

// 1. Заполнение матрицы числами по порядку

// [1][2][3]

// [4][5][6]

// [7][8][9]

 

Сч = 0;

 

Для Каждого СтрокаМатрицы Из Матрица Цикл

    

    Для НомерКолонки = 0 По СтрокаМатрицы.ВГраница() Цикл

        Сч = Сч + 1;

        СтрокаМатрицы[НомерКолонки] = Сч;

    КонецЦикла;

    

КонецЦикла;

 

// 2. Вычисление произведения следующей диагонали 

// [1][ ][ ]

// [ ][5][ ]

// [ ][ ][9]

//

// 1 * 5 * 9 = 45

//

// Первые операторные скобки получают значение первого массива, вторые второго

Результат = Матрица[0][0] * Матрица[1][1] * Матрица[2][2];

 

// 2. Вывод результата и матрицы

Для Каждого СтрокаМатрицы Из Матрица Цикл   

    Строка = "";

    Для Каждого КолонкаМатрицы Из СтрокаМатрицы Цикл

        Строка = Строка + "[" + КолонкаМатрицы + "]";

    КонецЦикла;

    Сообщить(Строка);

КонецЦикла;

 

Сообщить(Результат);

9. Скопировать массив

Исходный = Новый Массив;

Исходный.Добавить("Текст");

Исходный.Добавить(123);

Исходный.Добавить(Истина);

 

Скопированный = Новый Массив(Новый ФиксированныйМассив(Исходный));

 

Для Каждого Элемент Из Скопированный Цикл

    Сообщить(Элемент);

КонецЦикла;

Задачи на эту тему:

Рейтинг 0

Комментарии