Одномерный массив
// нумерация начинается с 0 Массив = Новый Массив(); // добавили элемент Массив.Добавить("Значение"); // вставили перед ним ещё один Массив.Вставить(0, "Значение"); // изменили значение первого элемента Массив.Установить(0, "Новое"); // удалили последнее значение Массив.Удалить(Массив.ВГраница()); // загадка Сообщить(Массив.Получить(0));
Показать решение
Новое
Многомерный массив
// массив из 2 элементов, // каждый из которых - массив из 2 элементов Массив = Новый Массив(2,2); // сообщит значение Неопределено Сообщить(Массив[0][1]); // установили значение Массив[0][1] = 10; // попробуем его найти ИндексНайденногоЭлемента = Массив.Найти(10); // какой будет результат?
Показать решение
Неопределено //т.к. значение добавили во вложенный массив, а ищем по первому
Обход одномерного массива
// создадим массив случайного размера (от 0 до 10 элементов) ГСЧ = Новый ГенераторСлучайныхЧисел(); РазмерМассива = ГСЧ.СлучайноеЧисло(0, 10); Если РазмерМассива = 0 Тогда // если передать в конструктор 0 получим ошибку Массив = Новый Массив(); Иначе Массив = Новый Массив(РазмерМассива); КонецЕсли; // если в массиве нет элементов - выходим Если Не Массив.Количество() Тогда Возврат; КонецЕсли; // прямой обход циклом "Для" Для Индекс = 0 По Массив.ВГраница() Цикл // получим Неопределено, т.к. элементы // массива не инициализированы Элемент = Массив[Индекс]; // установим элемент массива случайным числом // в том числе отрицательным // в диапазоне от -50 до +50 Массив.Установить(Индекс, -50 + ГСЧ.СлучайноеЧисло(0, 100)); КонецЦикла; // обратный обход циклом "Пока" Индекс = Массив.ВГраница(); Пока Индекс >= 0 Цикл Элемент = Массив[Индекс]; Индекс = Индекс - 1; КонецЦикла; Массив.Очистить(); // очистим массив Массив.Добавить(1); Массив.Добавить(2); Индекс = 0; // служебный счетчик // обход циклом "Для Каждого" Для Каждого Элемент Из Массив Цикл // Элемент - значение элемента массива Сообщить(Элемент); // ошибка, нельзя изменять массив // при обходе циклом "Для каждого" Массив.Вставить(0,100); // чтобы не попасть в бесконечный цикл // предусматриваем прервание цикла Если Индекс = 1 Тогда Прервать; КонецЕсли; Индекс = Индекс + 1; КонецЦикла; // Что будет выведено?
Показать решение
1 1 // цикл "Для каждого" содержит внутренний счетчик, // который увеличивается при следующей итерации цикла // вставка элемента в массив внутри цикла // не изменяет внутренний счетчик цикла
Удаление элементов массива
Массив = Новый Массив; // сформируем массив из 10 элементов // со значениями из диапазона [-50,50] ГСЧ = Новый ГенераторСлучайныхЧисел(); РазмерМассива = 10; Для Индекс = 1 По РазмерМассива Цикл Массив.Добавить(-50 + ГСЧ.СлучайноеЧисло(0, 100)); КонецЦикла; // обратный обход циклом "Пока" // обеспечивает корректное // удаление элементов Индекс = Массив.ВГраница(); Пока Индекс >= 0 Цикл Элемент = Массив[Индекс]; // удалим отрицательные элементы Если Элемент < 0 Тогда // удаляем элемент массива "с конца" Массив.Удалить(Индекс); КонецЕсли; // уменьшаем счетчик Индекс = Индекс - 1; КонецЦикла; // обход циклом "Для Каждого" // не предполагает изменение состава массива Для Каждого Элемент Из Массив Цикл // удалим положительные элементы Если Элемент > 0 Тогда // так неправильно Индекс = Массив.Найти(Элемент); Массив.Удалить(Индекс); КонецЕсли; КонецЦикла; // Почему в массиве останутся элементы?
Показать решение
// изменение состава массива внутри цикла, // не изменяет внутренний счетчик цикла "Для Каждого", // в частности его верхнее значение, // рассчитанное при запуске цикла // поэтому происходит "пропуск" элементов после удаления мы переходим не к следующему, а через один
Сортировка массива
Массив = Новый Массив; // сформируем массив из 10 элементов // со значениями из диапазона [-50,50] ГСЧ = Новый ГенераторСлучайныхЧисел(); РазмерМассива = 10; Для Индекс = 1 По РазмерМассива Цикл Массив.Добавить(-50 + ГСЧ.СлучайноеЧисло(0, 100)); КонецЦикла; // для сортировки можно использовать стандартные алгоритмы // а можно применить следующий метод Список = Новый СписокЗначений; Список.ЗагрузитьЗначения(Массив); Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв); Массив = Список.ВыгрузитьЗначения(); // Чем плох этот метод?
Показать решение
// он менее эффективен, т.к. использует // промежуточный объект "СписокЗначений" // происходит копирование значений массива // сначала "в", а потом "из" списка // на больших объемах данных это может стать проблемой, // но часто, для рядовых задач, этим можно пренебречь
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл.
При обходе выбираются значения элементов массива.
Возможно обращение к значению элемента посредством оператора [...].
В качестве аргумента передается индекс значения (нумерация с 0).
Синтаксис: Новый Массив(<Массив>)
Параметры:
<Массив> (необязательный) Тип: ФиксированныйМассив. Фиксированный массив.
Описание: Создаваемый массив заполняется значениями из исходного фиксированного массива. К элементам исходного массива применяется рекурсивное преобразование, т.е. элементы фиксированного массива, в свою очередь являющиеся фиксированными массивами, будут помещены в массив с преобразованием к типу Массив.
Синтаксис: Новый Массив(<КоличествоЭлементов1>,...,<КоличествоЭлементовN>)
Параметры:
<КоличествоЭлементов1>,...,<КоличествоЭлементовN> (необязательный) Тип: Число.
Каждый параметр определяет количество элементов массива в соответствующем измерении. Может задаваться неограниченное количество параметров. Если ни один параметр не указан, то создается одномерный массив с нулевым количеством элементов.
Описание: Создает массив из указанного количества элементов. Если задано несколько параметров, то будет создан массив, элементами которого являются массивы (и т.д. в зависимости от количества параметров). Фактически конструктор позволяет создать массивы массивов, которые могут являться аналогом многомерного массива.
Синтаксис: ВГраница()
Возвращаемое значение: Тип: Число.
Наибольший индекс в массиве. Если количество элементов массива равно 0, возвращает -1.
Описание: Получает наибольший индекс элемента массива.
Примечание: Наибольший индекс соответствует количеству элементов массива минус 1.
Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Вставить(<Индекс>, <Значение>)
Параметры:
<Индекс> (обязательный) Тип: Число. Индекс вставляемого значения.
<Значение> (необязательный) Тип: Произвольный. Вставляемое значение. Если не указан, то будет добавлено значение типа Неопределено.
Описание: Вставляет значение в массив по указанному индексу.
Примечание: Допускается указание индекса большего, чем ВГраница. В этом случае массив дополняется элементами с индексами от ВГраница()+1 до указанного в параметре индекса.
Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Добавить(<Значение>)
Параметры:
<Значение> (необязательный) Тип: Произвольный. Добавляемое значение. Если не указан, то будет добавлено значение типа Неопределено.
Описание: Добавляет элемент в конец массива.
Примечание: При добавлении количество элементов массива увеличивается на 1.
Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Количество()
Возвращаемое значение:
Тип: Число.
Описание: Получает количество элементов в массиве.
Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Найти(<Значение>)
Параметры:
<Значение> (обязательный) Тип: Произвольный. Искомое значение.
Возвращаемое значение: Тип: Число, Неопределено. Если элемент найден, возвращается его индекс. Если элемент не найден, возвращается Неопределено.
Описание: Выполняет поиск элемента в массиве.
Примечание: Метод эффективно использовать для поиска уникальных значений.
Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Очистить()
Описание:
Удаляет все значения из массива.
Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Получить(<Индекс>)
Параметры:
<Индекс> (обязательный) Тип: Число. Индекс элемента.
Возвращаемое значение: Тип: Произвольный.
Описание: Получает значение по индексу. Работает аналогично оператору [].
Примечание: Применяется в случаях, когда использование оператора [] невозможно.
Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Удалить(<Индекс>)
Параметры:
<Индекс> (обязательный) Тип: Число. Индекс удаляемого элемента.
Описание: Удаляет значение из массива по указанному индексу.
Примечание: Если указанный в параметре индекс больше, чем ВГраница, то никаких действий не производится и не выдается сообщение "Индекс находится за границами массива".
Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Синтаксис: Установить(<Индекс>, <Значение>)
Параметры:
<Индекс> (обязательный) Тип: Число. Индекс элемента. <Значение> (обязательный) Тип: Произвольный. Устанавливаемое значение.
Описание: Устанавливает значение по индексу. Работает аналогично оператору [].
Примечание: Применяется в случаях, когда использование оператора [] невозможно.
Доступность:Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.