Возвращает копию массива с указанием числа элементов и начального индекса В коде есть две реализации метода: 1. КопияМассиваНаполнением - Создает пустой массив и наполняет его циклом из оригинала 2. КопияМассиваУдалениемЛишних - Создает полную копию и удаления лишние элементы А так же метод КопияМассива, который в зависимости от числа объектов массива сам выбирает один из методов
// Возвращает копию массива с указанием числа элементов и начального индекса
// Внутри есть определение метода копирования
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/150
//
// Параметры:
// Массив - Массив из Произвольный
// НачальныйЭлемент - Число - Индекс начального элемента
// ЧислоЭлементов - Число - Число выбираемых элементов, 0 - все оставшиеся
// МетодКопирования - Число - 0 - определять автоматически, 1 - наполнение циклом, 2 - удаление лишних
//
// Возвращаемое значение:
// Массив из Произвольный
//
// Примеры:
// ИсходныйМассив = СтрРазделить("1,2,3,4,5", ",");
// Результат = КопияМассива(ИсходныйМассив, 1, 3); //"2,3,4" - Три элемента с индекса 1
// Результат = КопияМассива(ИсходныйМассив, 1); //"2,3,4,5" - Все элементы с индекса 1
// Результат = КопияМассива(ИсходныйМассив, 0, 2); //"1,2" - Первые 2 элемента
// Результат = КопияМассива(ИсходныйМассив); //"1,2,3,4,5" - Полная копия массива
//
Функция КопияМассива(Знач Массив, Знач НачальныйЭлемент = 0, Знач ЧислоЭлементов = 0, Знач МетодКопирования = 0) Экспорт
ВсегоЭлементов = Массив.Количество();
Если МетодКопирования = 0 Тогда
//Если массив меньше, то нет принципиально разницы в скорости
//TODO: Определить экспериментально идеальное значение
МинимальнаяДлинаМассиваДляПоискаМетода = 10;
Если ВсегоЭлементов > МинимальнаяДлинаМассиваДляПоискаМетода Тогда
Если ЧислоЭлементов = 0 Тогда
ЧислоЭлементов = ВсегоЭлементов - (НачальныйЭлемент + 1);
КонецЕсли;
Если ЧислоЭлементов = 0 Тогда
Возврат Новый Массив;
Иначе
ПроцентНужных = (ЧислоЭлементов / ВсегоЭлементов) * 100;
Если ПроцентНужных > 90 Тогда
МетодКопирования = 2; //Легче скопировать весь большой массив и удалить лишние элементы
Иначе
МетодКопирования = 1; //Легче взять нужные элементы из большого массива
КонецЕсли;
КонецЕсли;
Иначе
МетодКопирования = 1; //Устроит любой метод
КонецЕсли;
КонецЕсли;
Если МетодКопирования = 1 Тогда
КопияМассива = КопияМассиваНаполнением(Массив, НачальныйЭлемент, ЧислоЭлементов);
Иначе
КопияМассива = КопияМассиваУдалениемЛишних(Массив, НачальныйЭлемент, ЧислоЭлементов);
КонецЕсли;
Возврат КопияМассива;
КонецФункции
// Возвращает копию массива с указанием числа элементов и начального индекса
// Создает полную копию и удаления лишние элементы
// Эффективен, когда нужно взять бОльшую часть большОго массива
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/150
//
// Параметры:
// Массив - Массив из Произвольный
// НачальныйЭлемент - Число - Индекс начального элемента
// ЧислоЭлементов - Число - Число выбираемых элементов, 0 - все оставшиеся
//
// Возвращаемое значение:
// Массив из Произвольный
//
// Примеры:
// ИсходныйМассив = СтрРазделить("1,2,3,4,5", ",");
// Результат = КопияМассива(ИсходныйМассив, 1, 3); //"2,3,4" - Три элемента с индекса 1
// Результат = КопияМассива(ИсходныйМассив, 1); //"2,3,4,5" - Все элементы с индекса 1
// Результат = КопияМассива(ИсходныйМассив, 0, 2); //"1,2" - Первые 2 элемента
// Результат = КопияМассива(ИсходныйМассив); //"1,2,3,4,5" - Полная копия массива
Функция КопияМассиваУдалениемЛишних(Знач Массив,
Знач НачальныйЭлемент = 0, Знач ЧислоЭлементов = 0) Экспорт
КопияМассива = Новый Массив(Новый ФиксированныйМассив(Массив));
Пока НачальныйЭлемент > 0 Цикл
КопияМассива.Удалить(0);
НачальныйЭлемент = НачальныйЭлемент - 1;
КонецЦикла;
Если ЧислоЭлементов > 0 Тогда
ЭлементовКУдалению = КопияМассива.Количество() - ЧислоЭлементов;
Пока ЭлементовКУдалению > 0 Цикл
КопияМассива.Удалить(КопияМассива.ВГраница());
ЭлементовКУдалению = ЭлементовКУдалению - 1;
КонецЦикла;
КонецЕсли;
Возврат КопияМассива;
КонецФункции
// Возвращает копию массива с указанием числа элементов и начального индекса
// Создает пустой массив и наполняет его циклом из оригинала
// Эффективен, когда нужно взять несколько элементов из оригинального большого массива
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/150
//
// Параметры:
// Массив - Массив из Произвольный
// НачальныйЭлемент - Число - Индекс начального элемента
// ЧислоЭлементов - Число - Число выбираемых элементов, 0 - все оставшиеся
//
// Возвращаемое значение:
// Массив из Произвольный
//
// Примеры:
// ИсходныйМассив = СтрРазделить("1,2,3,4,5", ",");
// Результат = КопияМассива(ИсходныйМассив, 1, 3); //"2,3,4" - Три элемента с индекса 1
// Результат = КопияМассива(ИсходныйМассив, 1); //"2,3,4,5" - Все элементы с индекса 1
// Результат = КопияМассива(ИсходныйМассив, 0, 2); //"1,2" - Первые 2 элемента
// Результат = КопияМассива(ИсходныйМассив); //"1,2,3,4,5" - Полная копия массива
Функция КопияМассиваНаполнением(Знач Массив,
Знач НачальныйЭлемент = 0, Знач ЧислоЭлементов = 0) Экспорт
Если ЧислоЭлементов = 0 Тогда
ЧислоЭлементов = Массив.Количество() - НачальныйЭлемент;
КонецЕсли;
КопияМассива = Новый Массив(ЧислоЭлементов);
ИндексКопии = 0;
ИндексМассива = НачальныйЭлемент;
Пока ИндексКопии < ЧислоЭлементов Цикл
КопияМассива[ИндексКопии] = Массив[ИндексМассива];
ИндексМассива = ИндексМассива + 1;
ИндексКопии = ИндексКопии + 1;
КонецЦикла;
Возврат КопияМассива;
КонецФункции
Орфографическая ошибка в бОльшую: Ольшую Орфографическая ошибка в большОго: больш
Упорядочивание (сортировка) массива
ПриПредложенииПользователюСоздатьРезервнуюКопию (БСП)