diff --git a/src/Итератор/Ext/ObjectModule.bsl b/src/Итератор/Ext/ObjectModule.bsl index 2e2cbda..180dbb8 100644 --- a/src/Итератор/Ext/ObjectModule.bsl +++ b/src/Итератор/Ext/ObjectModule.bsl @@ -733,3 +733,33 @@ Результат = 1 = ЭтотОбъект.Клонировать().Фильтр("Условие = Элемент").Количество(); Возврат Результат; КонецФункции + +Функция Пронумеровать(Знач ПервыйНомер=0) Экспорт + Если ЭтотОбъект.Пустой() Тогда + Возврат ЭтотОбъект; + КонецЕсли; + + // создание пары Ключ => Значение + Набор = Новый Соответствие; + КлючиПоПорядку = Новый Массив; + + ЭтотОбъект.СброситьПозицию(); + Счетчик = ПервыйНомер; + Пока ЭтотОбъект.Следующий() Цикл + Набор.Вставить(Счетчик, ЭтотОбъект.ТекущийЭлемент()); + КлючиПоПорядку.Добавить(Счетчик); + + Счетчик = 1 + Счетчик; + КонецЦикла; + ЭтотОбъект.СброситьПозицию(); + + // заполнение новой коллекции + ЭтотОбъект.Начать(); + ЭтотОбъект.Вставить(КлючиПоПорядку.ВГраница(), Неопределено); + Для Каждого ТекПара Из Набор Цикл + Индекс = КлючиПоПорядку.Найти(ТекПара.Ключ); + ЭтотОбъект.Установить(Индекс, ТекПара); + КонецЦикла; + + Возврат ЭтотОбъект; +КонецФункции diff --git a/test/Тест_Итератор/Ext/ObjectModule.bsl b/test/Тест_Итератор/Ext/ObjectModule.bsl index b53d570..9791593 100644 --- a/test/Тест_Итератор/Ext/ObjectModule.bsl +++ b/test/Тест_Итератор/Ext/ObjectModule.bsl @@ -97,6 +97,8 @@ НаборТестов.Добавить("Тест_ВерноЛюбое"); НаборТестов.Добавить("Тест_ВерноТолькоОдно"); + НаборТестов.Добавить("Тест_Пронумеровать"); + КонецПроцедуры Процедура ПередЗапускомТеста() Экспорт @@ -611,4 +613,13 @@ ).ЭтоИстина(); КонецПроцедуры +Процедура Тест_Пронумеровать() Экспорт + Ожидаем.Что(Итератор() + .ВзятьИз("АБВГД") + .Пронумеровать() + .Карта("Результат = СтрШаблон(""%1.%2"", Элемент.Ключ, Элемент.Значение)") + .СобратьСтроку(" ") + ).Равно("0.А 1.Б 2.В 3.Г 4.Д"); +КонецПроцедуры +