1с статьи | Курс-репетитор программиста 1С
Массивы

Одномерный массив

// нумерация начинается с 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;
КонецЦикла;

// Что будет выведено?

Показать решение

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

Массив = Новый Массив;
// сформируем массив из 10 элементов
// со значениями из диапазона [-50,50]
ГСЧ = Новый ГенераторСлучайныхЧисел();           
РазмерМассива = 10;  
Для Индекс = 1 По РазмерМассива Цикл
   Массив.Добавить(-50 + ГСЧ.СлучайноеЧисло(0, 100));
КонецЦикла; 

// обратный обход циклом "Пока"
// обеспечивает корректное
// удаление элементов
Индекс = Массив.ВГраница();

Пока Индекс >= 0 Цикл
   Элемент = Массив[Индекс];
   
   // удалим отрицательные элементы
   Если Элемент < 0 Тогда
      // удаляем элемент массива "с конца"         
      Массив.Удалить(Индекс);         
   КонецЕсли; 
   // уменьшаем счетчик
   Индекс = Индекс - 1;
КонецЦикла;

// обход циклом "Для Каждого"
// не предполагает изменение состава массива
Для Каждого Элемент Из Массив Цикл
   // удалим положительные элементы
   Если Элемент > 0 Тогда
      // так неправильно - получим ошибку
      Массив.Удалить(Индекс);         
   КонецЕсли; 
КонецЦикла;

// Почему возникла ошибка
// "Значение индекса выходит за границы диапазона"?

Показать решение

Сортировка массива

Массив = Новый Массив;
// сформируем массив из 10 элементов
// со значениями из диапазона [-50,50]
ГСЧ = Новый ГенераторСлучайныхЧисел();           
РазмерМассива = 10;  
Для Индекс = 1 По РазмерМассива Цикл
   Массив.Добавить(-50 + ГСЧ.СлучайноеЧисло(0, 100));
КонецЦикла;

// для сортировки можно использовать стандартные алгоритмы
// а можно применить следующий метод

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

Массив = Список.ВыгрузитьЗначения();

// Чем плох этот метод?

Показать решение

Слишком маленькое разрешение экрана.