Как удалить элемент массива в 1с
Перейти к содержимому

Как удалить элемент массива в 1с

  • автор:

Как удалить элемент массива?

Удалить из массива:
а) все отрицательные элементы;
б) все элементы, большие данного числа n;
в) все элементы, начиная с n1-го по n2-й (n1 n2).

Строка="";
Строка1="";
к=0;
МассивН=Новый Массив(20);
Для Счетчик=0 По 19 Цикл
ГСЧ=Новый ГенераторСлучайныхЧисел(Счетчик);
СлучайноеЧисло=ГСЧ.СлучайноеЧисло(0,20);
Если СлучайноеЧисло%2=0 Тогда
А=СлучайноеЧисло*1;
ИначеЕсли СлучайноеЧисло%2=1 Тогда
А=случайноеЧисло*(-1);
КонецЕсли;
МассивН[Счетчик]=А;
Строка=Строка+МассивН[Счетчик]+" ";
КонецЦикла;
Сообщить("МассивН: "+Строка);

Если что, дарю (и не благодари):

Массив (Array)
Удалить (Delete)
Синтаксис:

Тип: Число.
Индекс удаляемого элемента.
Описание:

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

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:

Если указанный в параметре индекс больше, чем ВГраница, то никаких действий не производится и не выдается сообщение "Индекс находится за границами массива".
Пример:

Для Счетчик=1-Массив.Количество() По 0 Цикл

// Задача А
Если Массив[-Счетчик]<0 Тогда
Массив.Удалить(-Счетчик);
КонецЕсли;

// Задача Б
Если Массив[-Счетчик]>ЧислоЭн Тогда
Массив.Удалить(-Счетчик);
КонецЕсли;

// Задача В
Для Счетчик=1-Массив.Количество()+Эн2 По Эн1 Цикл
Массив.Удалить(-Счетчик);
КонецЦикла;

Строка="";
Строка1="";
к=0;
МассивН=Новый Массив(20);
Для Счетчик=0 По 19 Цикл
ГСЧ=Новый ГенераторСлучайныхЧисел(Счетчик);
СлучайноеЧисло=ГСЧ.СлучайноеЧисло(0,20);
Если СлучайноеЧисло%2=0 Тогда
А=СлучайноеЧисло*1;
ИначеЕсли СлучайноеЧисло%2=1 Тогда
А=случайноеЧисло*(-1);
КонецЕсли;
МассивН[Счетчик]=А;
Строка=Строка+МассивН[Счетчик]+" ";
КонецЦикла;
Сообщить("МассивН: "+Строка);
МассивКУдалению = Новый Массив();
Для Каждого эл из МассивН Цикл
Если эл<0 Тогда
МассивКУдалению.Добавить(Эл);
Сообщить(эл);
КонецЕсли;
КонецЦикла;
Для Каждого эл из МассивКУдалению Цикл
МассивН.Удалить(МассивН.Найти(эл));
КонецЦикла;

Сообщить("Количество массива после удаления: "+МассивН.Количество());

(15) // Задача В решена неправильно, удаляется то что вне диапазона n1 : n2

Для Счетчик=1-Массив.Количество()+Эн2 По Эн1 Цикл
Массив.Удалить(-Счетчик);
КонецЦикла;

// правильное решение задачи В
Для Счетчик = -Эн2 По -Эн1 Цикл
Массив.Удалить(-Счетчик);
КонецЦикла;

(18) Ты еще до этого Эпика не дошел 🙂

Для Каждого эл из МассивКУдалению Цикл
МассивН.Удалить(МассивН.Найти(эл));
КонецЦикла;

// код
Для Каждого эл из МассивКУдалению Цикл
МассивН.Удалить(МассивН.Найти(эл));
КонецЦикла;

а это точно работает?
пойду попробую, думаю, всё таки, пространственно-временной континуум не свернется в точку.

У меня вопрос по тексту задания:

>Удалить из массива:
>а) все отрицательные элементы;
>б) все элементы, большие данного числа n;
>в) все элементы, начиная с n1-го по n2-й (n1 n2).

Пункт "в" должен выполняться после выполнения пунктов "а" и "б" или до?

Ничего, что условие "В", если оно будет выполняться после "а" и(или) "б" запросто может не сработать, т.к. вполне возможен случай, что n1 и(или) n2 превысят границы результирующего массива, полученного после выполнения "а" и "б"?

p.s. Жижа Гренков? Жижа?

(0) Я просмотрел бегло код и не понял его связи с постановкой задачи. Там нет ни одного удаления. Там нет числа n и прочего.
.
Блин, все-таки вчитался в код, как дурак. Там заполнение массива значениями и всякая ерунда. Зачем нам этот кусок кода?? Ты зачем нас зря напрягал?

Справедливый вопрос — ты хочешь, чтобы мы решили за тебя?
Если нет, то почему нет точных вопросов? Что тебе именно не понятно?

Как удалить элемент массива в 1с

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Массив

Описание:

Предназначен для доступа к элементам массива, его методам и конструктору.

Элементы коллекции: Произвольный

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются значения элементов массива.

Возможно обращение к значению элемента посредством оператора [. ]. В качестве аргумента передается индекс значения (нумерация с 0).

1С 8.3 Массив — Программист 1С Минск. Автоматизация бизнеса.

✔ Создание массива (определенного размера)

&НаКлиенте
Процедура СозданиеМассиваОпределенногоРазмера ( Команда )

// Массив состоит из 3-х элементов
МассивОпрРазмера = Новый Массив ( 3 );

// Определяем значения элементов
МассивОпрРазмера [ 0 ] = 3 ;
МассивОпрРазмера [ 1 ] = МассивОпрРазмера [ 0 ] * 2 ; // 6
МассивОпрРазмера [ 2 ] = МассивОпрРазмера [ 1 ] * 3 ; // 18

Для Каждого ЭлементМассива из МассивОпрРазмера Цикл
Сообщить ( ЭлементМассива ); // 3 6 18
КонецЦикла;

&НаКлиенте
Процедура СозданиеМассиваБезРазмера ( Команда )

// В массиве пока нет элементов
МассивБезРазмера = Новый Массив ;

// Добавляем последовательно 3 элемента
МассивБезРазмера . Добавить ( 20 ); // Массив: (20)
МассивБезРазмера . Добавить ( 40 ); // Массив: (20, 40)
МассивБезРазмера . Добавить ( 70 ); // Массив: (20, 40, 70)

Для Каждого ЭлементМассива из МассивБезРазмера Цикл
Сообщить ( ЭлементМассива ); // 20 40 70
КонецЦикла;

&НаКлиенте
Процедура СозданиеМассиваСЭлементамиРазныхТипов ( Команда )

Массив = Новый Массив ( 5 );
Массив [ 0 ] = «1Cnik.BY» ; // («1Cnik.BY»)
Массив [ 1 ] = 36 ; // («1Cnik.BY», 36)
Массив [ 2 ] = «@» ; // («1Cnik.BY», 36, «@»)
Массив [ 3 ] = Формат ( 2007 , «ЧГ=0» ); // («1Cnik.BY», 36, «@», 2007)
Массив [ 4 ] = Дата ( «20200330» ); // («1Cnik.BY», 36, «@», 2007, 30.03.2020)

Для Каждого ЭлементМассива из Массив Цикл
Сообщить ( ЭлементМассива ); // 1Cnik.BY 36 @ 2007 30.03.2020
КонецЦикла;

&НаКлиенте
Процедура ОбходВсехЭлементовМассиваПоИндексу ( Команда )

// Инициализируем массив: (20, 40, 70)
МассивИндекс = Новый Массив ;
МассивИндекс . Добавить ( 20 );
МассивИндекс . Добавить ( 40 );
МассивИндекс . Добавить ( 70 );

// Цикл от первого (с индексом 0) до последнего элемента.
Для Индекс = 0 По МассивИндекс . Количество () — 1 Цикл
Сообщить ( МассивИндекс [ Индекс ]);
КонецЦикла;

&НаКлиенте
Процедура РаботаСМассивом ( Команда )

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

// Вставка трёх элементов; каждый элемент вставляется в начало
Массив . Вставить ( 0 , «А» ); // (А)
Массив . Вставить ( 0 , «Б» ); // (Б, А)
Массив . Вставить ( 0 , «В» ); // (В, Б, А)
Массив . Вставить ( 0 , «Г» ); // (Г, В, Б, А)

// Определение последнего индекса
Сообщить ( Массив . ВГраница ()); // 3

// Перебор массива в цикле
Для Индекс = 0 по Массив . ВГраница () Цикл
Сообщить ( Массив [ Индекс ]); // Г В Б А
КонецЦикла;

// Находим индекс элемента
Индекс = Массив . Найти ( «А» ); // 1
// Удаляем элемент по найденному индексу
Массив . Удалить ( Индекс ); // Остаётся массив (Г, В, Б)

// Определение последнего индекса — теперь он уменьшился
Сообщить ( Массив . ВГраница ()); // 2

// Удаление всех элементов из массива
Массив . Очистить ();

&НаКлиенте
Функция ПередачаМассиваВКачествеПараметраФункции ( СсылкаНаМассив )

СсылкаНаМассив [ 0 ] = 50 ;
Возврат СсылкаНаМассив [ 0 ] * 5 ;

&НаКлиенте
Процедура ПередачаМассива ( Команда )

Массив = Новый Массив ( 1 ); // Инициализация массива из одного элемента
Массив [ 0 ] = 70 ; // Значение элемента до вызова функции = 70

// Передача массива в функцию для изменения
Сообщить ( ПередачаМассиваВКачествеПараметраФункции ( Массив )); // 250

// Значение первого элемента после функции изменилось
Сообщить ( Массив [ 0 ]); // 50

&НаКлиенте
Функция СозданиеМассива ()

Массив = Новый Массив ( 3 );
Массив [ 0 ] = «Добро» ;
Массив [ 1 ] = «пожаловать» ;
Массив [ 2 ] = «в Беларусь!» ;

&НаКлиенте
Процедура МассивВРезультатеВыполненияФункции ( Команда )

// Возврат массива из функции
МассивИзФункции = СозданиеМассива ();

Для Каждого ЭлементМассива из МассивИзФункции Цикл
Сообщить ( ЭлементМассива ); // Добро пожаловать в Беларусь!
КонецЦикла;

&НаКлиенте
Процедура ПроверкаМассива ( СсылкаНаМассив )

Если СсылкаНаМассив <> Неопределено И СсылкаНаМассив . Количество () > 0 Тогда
Сообщить ( СсылкаНаМассив [ 0 ]);
КонецЕсли;

&НаКлиенте
Процедура ПередачаМассиваВКачествеПараметраПроцедуры ( Команда )

// Инициализация массива: (20, 40, 70)
Массив = Новый Массив ( 3 );
Массив [ 0 ] = 20 ;
Массив [ 1 ] = 40 ;
Массив [ 2 ] = 70 ;

// печать первого элемента, переданного массива
ПроверкаМассива ( Массив ); // 20
ПроверкаМассива (Неопределено); // пусто
ПроверкаМассива (Новый Массив ); // пусто

&НаКлиенте
Процедура РаботаСМногомернымМассивом ( Команда )

// ,<>,<>> ,<>,<>>
Массив = Новый Массив ( 2 , 3 ); // два столбца, три строки

// , , > ,<>,<>>
Массив [ 0 ][ 0 ] = «А» ;
Массив [ 0 ][ 1 ] = «Б» ;
Массив [ 0 ][ 2 ] = «В» ;

// , , > , , >
Массив [ 1 ][ 0 ] = «1» ;
Массив [ 1 ][ 1 ] = «2» ;
Массив [ 1 ][ 2 ] = «3» ;

// Обход элементов многомерного массива через простой цикл
Для Каждого СтрокаМассива Из Массив Цикл
Для Каждого ЭлементМассива Из СтрокаМассива Цикл
Сообщить ( ЭлементМассива );
КонецЦикла;
КонецЦикла;

// Обход элементов многомерного массива через индекс
Для ИндексСтрока = 0 По Массив . Количество () — 1 Цикл
Для ИндексСтолбец = 0 По Массив [ ИндексСтрока ]. Количество () — 1 Цикл
Сообщить ( Массив [ ИндексСтрока ][ ИндексСтолбец ]);
КонецЦикла;
КонецЦикла;

2.1. Массивы

ДвумерныйМассив = Новый Массив(2, 8); ДвумерныйМассив = Новый Массив; МассивВторогоПорядка = Новый Массив(8); ДвумерныйМассив.Добавить(МассивВторогоПорядка); ДвумерныйМассив.Добавить(МассивВторогоПорядка); Значение = ДвумерныйМассив[2][5]; Значение = ДвумерныйМассив.Получить(2).Получить(5);

НашМассив.Добавить(НовоеЗначение); Массив = Новый Массив; Массив.Вставить(5, "ООО ""Лабан""");

ПервоеЗначение = НашМассив[0]; НашМассив[9] = ДесятоеЗначение; ПервоеЗначение = НашМассив.Получить(0); НашМассив.Установить(9, ДесятоеЗначение);

Для Каждого ЭлементМассива Из МассивЭлементов Цикл Если ТипЗнч(ЭлементМассива) = Тип("Число") Тогда Сообщение(ЭлементМассива); КонецЕсли; КонецЦикла; Для Сч = 0 по МассивЭлементов.ВГраница() Цикл Если ТипЗнч(МассивЭлементов[Сч]) = Тип("Число") Тогда МассивЭлементов[Сч] = 0; КонецЕсли; КонецЦикла;

МассивЭлементов.Удалить(0); Индекс = МассивЭлементов.ВГраница();Пока Индекс >= 0 Цикл Если ТипЗнч(МассивЭлементов[Индекс]) = Тип("Число") Тогда МассивЭлементов.Удалить(Индекс); КонецЕсли; Индекс = Индекс — 1; КонецЦикла;

Процедура УдалитьПовторяющиесяЭлементы(Массив) ТекущийИндекс = 0; ВсегоЭлементов = Массив.Количество(); Пока ТекущийИндекс < ВсегоЭлементов Цикл Индекс2 = ТекущийИндекс + 1; Пока Индекс2 < ВсегоЭлементов Цикл Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда Массив.Удалить(Индекс2); ВсегоЭлементов = ВсегоЭлементов — 1; Иначе Индекс2 = Индекс2 + 1; КонецЕсли; КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1; КонецЦикла;

Функция СкопироватьМассив(ИсходныйМассив) МассивКопия = Новый Массив; Для Каждого Элемент Из ИсходныйМассив Цикл МассивКопия.Добавить(Элемент); КонецЦикла; Возврат МассивКопия; КонецФункции

Функция ПроверитьИдентичностьМассивов(ПервыйМассив, ВторойМассив) НаибольшийИндекс = ПервыйМассив.ВГраница(); Если НаибольшийИндекс > ВторойМассив.ВГраница () Тогда Возврат Ложь; КонецЕсли; Для Счетчик = 0 По НаибольшийИндекс Цикл Если ПервыйМассив[Счетчик] <> ВторойМассив[Счетчик] Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции

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

Процедура УдалитьПустыеЭлементы(МассивНоменклатуры) Счетчик = 0; КоличествоЭлементов = МассивНоменклатуры.Количество(); Пока Счетчик < КоличествоЭлементов Цикл Если МассивНоменклатуры [Счетчик].Пустая() Тогда МассивНоменклатуры.Удалить(Счетчик); КоличествоЭлементов = КоличествоЭлементов — 1; Иначе Счетчик = Счетчик + 1; КонецЕсли; КонецЦикла; КонецПроцедуры

МассивНоменклатуры = СсылкаНаДокумент.Номенклатура.ВыгрузитьКолонку("Номенклатура"); МассивНоменклатурыТара = СсылкаНаДокумент.ВозвратнаяТара.ВыгрузитьКолонку("Номенклатура"); Для Каждого ЭлементМассиваТара Из МассивНоменклатурыТара Цикл МассивНоменклатуры.Добавить(ЭлементМассиваТара); КонецЦикла;

МассивСовпадающихКолонок = Новый Массив(); Для Каждого Колонка Из ТаблицаПриемник.Колонки Цикл ИмяКолонкиПриемника = Колонка.Имя; Если ТаблицаИсточник.Колонки.Найти(ИмяКолонкиПриемника) <> Неопределено Тогда МассивСовпадающихКолонок.Добавить(ИмяКолонкиПриемника); КонецЕсли; КонецЦикла;

Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ОтпускаОрганизацииРаботникиОрганизации.ФизЛицо, | ОтпускаОрганизацииРаботникиОрганизации.ДатаНачала, | ОтпускаОрганизацииРаботникиОрганизации.ДатаОкончания |ИЗ | Документ.ОтпускаОрганизации.РаботникиОрганизации КАК ОтпускаОрганизацииРаботникиОрганизации |ГДЕ | ОтпускаОрганизацииРаботникиОрганизации.ПричинаОтсутствия В (&МассивПричин)"; МассивПричин = Новый Массив; МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускБезСохраненияЗарплаты); МассивПричин.Добавить(Перечисления.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускУчебный); Запрос.УстановитьПараметр("МассивПричин", МассивПричин);

Функция ПолучитьМассивРасчетчиков(Подразделение) НаборЗаписей = РегистрыСведений.РасчетчикиЗарплатыОрганизации.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ПодразделениеОрганизации.Установить(Подразделение); НаборЗаписей.Прочитать(); МассивРасчетчиков = НаборЗаписей.ВыгрузитьКолонку("Пользователь"); Возврат МассивРасчетчиков; КонецФункции Функция ПолучитьМассивРасчетчиков(Подразделение) Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | РасчетчикиЗарплатыОрганизации.Пользователь КАК Расчетчик |ИЗ | РегистрСведений.РасчетчикиЗарплатыОрганизации КАК РасчетчикиЗарплатыОрганизации |ГДЕ | РасчетчикиЗарплатыОрганизации.ПодразделениеОрганизации = &Подразделение"; Запрос.УстановитьПараметр("Подразделение", Подразделение); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); МассивРасчетчиков = Новый Массив; Пока Выборка.Следующий() Цикл МассивРасчетчиков.Добавить(Выборка.Расчетчик); КонецЦикла; Возврат МассивРасчетчиков; КонецФункции

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

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