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

Как из массива убрать элемент 1с

  • автор:

Как из массива убрать элемент 1с

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

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

Проще создать новый массив и копировать туда элементы, не попадающие под эти условия
(1) это похоже на тестовое задание, так что такое решение вряд-ли прокатит
с прошлой ветки не дошло?
(0) А что не получается то? Или просишь, чтобы за тебя задание решили?
(2) Не тестовое, а экзамен по нформатике за 9й класс
август месяц. это вступительный экзамен в 9й класс
Тока мне непонятно что подразумевается под удалением из массива фикси размерности?
(4) Я что написал решить за меня.
ты написал решить за тебя это
(0) И ?
Перебирай массив с конца , ставь условие и удаляй. Делов-то
(10) мы уже пробовали, не помогает

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

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

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

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

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

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

>Если указанный в параметре индекс больше,
а если меньше, чем НГраница? косяк в СП?
(12) В 1С массивы «неправильные» ))

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

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

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

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

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

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

(16) это тянет максимум на троечку или даже меньше, т.к. видно, что нет понимания работы с массивом и алгоритмически ужасно

(16) а зачем тебе 20 ГСЧ? а почему именно до 19, а не до Н? а зачем второй массив? а кто придумал называть переменные ключевыми словами? а зачем лишние переменные? а тебе хватит на жизнь одной коленки?

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

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

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

(14) ага, в 1С одномерные массивы это связанные списки объектов, эмулирующие массив, а многомерные массивы — деревья

(20) даже никогда не думал, что массив это список и до сих пор сомнения есть. Получается сложность доступа к значению по индексу O(n)? Я бы скорее поверил что это хешированная коллекция (Map)

Как из массива убрать элемент 1с

Если ТипЗнч(ВыбСтрока) = Тип(«Массив») Тогда
КолвоЭлементов = ВыбСтрока.Количество();
Индекс = 0;
Для н = 1 По КолвоЭлементов Цикл

Номенклатура = ВыбСтрока[Индекс].Номенклатура;
ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения;
Цена = ВыбСтрока[Индекс].Цена;
Лимит = ВыбСтрока[Индекс].Лимит;
ВалютаЦены = ВыбСтрока[Индекс].Валюта;
Характеристика = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры;
Склад = ВыбСтрока[Индекс].Склад;
Серия = Справочники.СерииНоменклатуры.ПустаяСсылка();
Качество = ВыбСтрока[Индекс].Качество;

Индекс = Индекс + 1;
КонецЦикла

После удаления выборка сбивается.

Если ТипЗнч(ВыбСтрока) = Тип(«Массив») Тогда
КолвоЭлементов = ВыбСтрока.Количество();
Индекс = 0;
Для н = 1 По КолвоЭлементов Цикл
Индекс = КолвоЭлементов — н;

Номенклатура = ВыбСтрока[Индекс].Номенклатура;
ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения;
Цена = ВыбСтрока[Индекс].Цена;
Лимит = ВыбСтрока[Индекс].Лимит;
ВалютаЦены = ВыбСтрока[Индекс].Валюта;
Характеристика = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры;
Склад = ВыбСтрока[Индекс].Склад;
Серия = Справочники.СерииНоменклатуры.ПустаяСсылка();
Качество = ВыбСтрока[Индекс].Качество;

Если ТипЗнч(ВыбСтрока) = Тип(«Массив») Тогда
КолвоЭлементов = ВыбСтрока.Количество();
Индекс = 0;
Для н = 1 По КолвоЭлементов Цикл

Номенклатура = ВыбСтрока[Индекс].Номенклатура;
ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения;
Цена = ВыбСтрока[Индекс].Цена;
Лимит = ВыбСтрока[Индекс].Лимит;
ВалютаЦены = ВыбСтрока[Индекс].Валюта;
Характеристика = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры;
Склад = ВыбСтрока[Индекс].Склад;
Серия = Справочники.СерииНоменклатуры.ПустаяСсылка();
Качество = ВыбСтрока[Индекс].Качество;

Индекс = Индекс + 1;
КонецЦикла

Если НужноУдалить Тогда
ВыбСтрока.Удалить(Индекс);
Иначе
Индекс = Индекс+1;
КонецЕси;

Так это получается выборка в обратном порядке.
(4) ессно или см. (3)
ОФФ: чем Вграница() хуже Количество()-1 ?

(6) Много функций надо помнить.
Вграница() есть только у Массива, зато Количество() есть у всех коллекций значений.

Удаление элементов коллекции в цикле
———————————————————————————
При необходимости удаления некоторых элементов из какой-либо коллекции элементов, обладающей свойством неявного сдвига элементов при удалении (например, таблица значений, набор записей регистра и т.д.), необходимо использовать следующий алгоритм:

КолвоЭлементовКоллекции = Коллекция.Количество();
Для ОбратныйИндекс = 1 По КолвоЭлементовКоллекции Цикл
ЭлементКоллекции = Коллекция[КолвоЭлементовКоллекции — ОбратныйИндекс];

Если Тогда
Коллекция.Удалить(ЭлементКоллекции);
КонецЕсли;

Где Коллекция – обрабатываемая коллекция элементов.

предложу екзотический варинт (иногда применяю. ):

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

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

УдалитьЗначениеИзМассива (БСП)

  • Удалить значение из массива. Удаляет одно значение из массива.

    // Удаляет одно значение из массива. // // Параметры: // Массив - Массив - массив, из которого необходимо удалить значение; // Значение - Массив - удаляемое значение из массива. // Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт Индекс = Массив.Найти(Значение); Если Индекс <> Неопределено Тогда Массив.Удалить(Индекс); КонецЕсли; КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////////////////////////// // Copyright (c) 2019, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: // https://creativecommons.org/licenses/by/4.0/legalcode ///////////////////////////////////////////////////////////////////////////////////////////////////////
    // Удаляет одно значение из массива. // // Параметры: // Массив - Массив - массив, из которого необходимо удалить значение; // Значение - Массив - удаляемое значение из массива. // Процедура УдалитьЗначениеИзМассива(Массив, Значение) Экспорт Индекс = Массив.Найти(Значение); Если Индекс <> Неопределено Тогда Массив.Удалить(Индекс); КонецЕсли; КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////////////////////////// // Copyright (c) 2019, ООО 1С-Софт // Все права защищены. Эта программа и сопроводительные материалы предоставляются // в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) // Текст лицензии доступен по ссылке: // https://creativecommons.org/licenses/by/4.0/legalcode ///////////////////////////////////////////////////////////////////////////////////////////////////////

    Массив. Метод Удалить()

    Метод Удалить() удаляет элемент массива по указанному индексу. Количество элементов индекса уменьшается на 1. Если указанный в параметре индекс больше, чем возвращает метод ВГраница(), будет вызвано исключение «Индекс находится за границами массива» .

    Доступность

    Версия Поддержка
    8.1 Сервер, Клиент, Внешнее соединение
    8.2 Сервер, Толстый клиент, Тонкий клиент, Веб-клиент, Внешнее соединение
    8.3 Сервер, Толстый клиент, Тонкий клиент, Веб-клиент, Внешнее соединение, Мобильный автономный сервер, Мобильный клиент, Мобильное приложение

    Пример использования

    Пример кода с использованием метода Удалить() :

    массив = Новый Массив; массив.Добавить(1); массив.Добавить(2); //удалить найденный элемент найдЭлт = массив.Найти(1); массив.Удалить(найдЭлт); //удалить первые 3 Для Инд = 0 По 3 Цикл Если массив.Количество() = 0 Тогда Прервать; КонецЕсли; массив.Удалить(0); КонецЦикла; //удалить все Пока массив.Количество() > 0 Цикл массив.Удалить(0); КонецЦикла; //но лучше сделать так: массив.Очистить(); 

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

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