Имя: Пароль:
1C
1С v8
Функция Удалить Повторяющиеся Элементы Массива и Пустые строки
0 Tcibah
 
15.04.13
11:58
Функция УдалитьПовторяющиесяЭлементыМассива(Массив) Экспорт
ВсегоЭлементов = Массив.Количество();
ТекущийИндекс = 0;
   Пока ТекущийИндекс < ВсегоЭлементов Цикл
       Индекс2 = ТекущийИндекс + 1;
       Пока Индекс2 < ВсегоЭлементов Цикл
           Если Массив[Индекс2] = "" Тогда                 //сравниваем каждый следующий и если он "" то удаляем
               Массив.Удалить(Индекс2);
               ВсегоЭлементов = ВсегоЭлементов - 1;
           ИначеЕсли Массив[ТекущийИндекс] = "" Тогда                //удаляем 1ый пустой
               Массив.Удалить(ТекущийИндекс);
               ВсегоЭлементов = ВсегоЭлементов - 1;
           Иначе
               Индекс2 = Индекс2 + 1;
           КонецЕсли;
       КонецЦикла;
       ТекущийИндекс = ТекущийИндекс + 1;
   КонецЦикла;
   
ТекущийИндекс = 0;
   Пока ТекущийИндекс < ВсегоЭлементов Цикл
       Индекс2 = ТекущийИндекс + 1;
       Пока Индекс2 < ВсегоЭлементов Цикл
           Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда
               Массив.Удалить(Индекс2);
               ВсегоЭлементов = ВсегоЭлементов - 1;
           Иначе
               Индекс2 = Индекс2 + 1;
           КонецЕсли;
       КонецЦикла;
       ТекущийИндекс = ТекущийИндекс + 1;
   КонецЦикла;
                     
   Возврат Массив;
КонецФункции

Мой код удаляет первый элемент и все последующие.кроме последнего
В значении "ТекущийИндекс" содержиться количество всех элементов массива.

Если Массив[ТекущийИндекс] = "" Тогда
Массив.Удалить(ТекущийИндекс);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;

Но ругается что индекс за пределами.Проверку делал вне цикла. в конце кода
1 Maxus43
 
15.04.13
11:59
классика же, удаляя элементы надо двигаться с конца массива, а не с начала
2 Maxus43
 
15.04.13
12:01
>>Мой код удаляет первый элемент и все последующие.кроме последнего
А не легче просто последний вытащить? зачем удалять остальные?
3 vicof
 
15.04.13
12:05
+(2) Зачем вообще получать кучу элементов, чтобы потом их удалять?
4 Tcibah
 
15.04.13
13:00
Я получаю кучу элементов и вывожу их в макет, грубо говоря их 31, как дней

Некоторые записи повторяются. С 5 по 9 например значение 1-1 а с 12-16 значение 2-2
и чтобы он не выводит 5 раз 1-1 или 4 раза 2-2 я удаляю дублёры)но этот пример которые я брал за основу иногда косячи и добавляет пустой элемент спереди или сзади массива.
5 Tcibah
 
15.04.13
13:10
(2)
">>Мой код удаляет первый элемент и все последующие.кроме последнего
А не легче просто последний вытащить? зачем удалять остальные?
"

Потому что первый и те_что_между_элементами я удалил уже.
6 Tcibah
 
16.04.13
10:33
Решение проблемы:
Добавил условие на элемент массива
Если Массив[н] <> Неопределено Тогда
Независимо от того, куда вы едете — это в гору и против ветра!