Функция перестановки двух элементов массива

Лень было писать самому, попросил ИИ, написал, правда с шагом минус один, но я попросил поправить, поправил. Вот код, работает:

&НаКлиентеНаСервереБезКонтекста
Процедура ПереставитьЭлемент(Массив, Источник, Приемник)
	
    Если Источник = Приемник Тогда
        Возврат;
    КонецЕсли;

    Элемент = Массив[Источник];

    Если Источник < Приемник Тогда
        Для Индекс = Источник По Приемник - 1 Цикл
            Массив[Индекс] = Массив[Индекс + 1];
        КонецЦикла;
    Иначе
        Для Смещ = 0 По Источник - Приемник - 1 Цикл
            Массив[Источник - Смещ] = Массив[Источник - Смещ - 1];
        КонецЦикла;
    КонецЕсли;

    Массив[Приемник] = Элемент;
КонецПроцедуры

В общем, можно не учиться этому, а довериться ИИ.

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментариев 9

  1. rzd:

    А чем это отличается от задачи поменять местами значения двух переменных. Циклы какие-то. Там три присвоения весь код

  2. rzd:

    Заголовок внимательно перечитай

    • с заголовком все окей. Функция именно это и делает, но через перестановку всех элементов, ИИ видимо не знало, что есть сдвиг.

      Дал такой промпт:
      Перепиши эту функцию без массовых сдвигов элементов, используя функцию Вставить 1С (вставляет элемент в массив в заданную позицию)

      Дало такой код:

      Процедура ПереставитьЭлемент(Массив, Источник, Приемник)
      Если Источник = Приемник Тогда
      Возврат;
      КонецЕсли;

      // Получаем элемент для перемещения
      Элемент = Массив[Источник];

      // Удаляем элемент с позиции Источник
      Массив.Удалить(Источник);

      // Вставляем элемент на позицию Приемник
      Массив.Вставить(Приемник, Элемент);
      КонецПроцедуры

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *