Получение таблицы и массива, заполненных последовательностью чисел от 0 до N-1

FastCode 1518 12 22 67

Иногда бывает нужно быстро получить готовый массив с последовательностью чисел от 0 до N-1. Например, чтобы пронумеровать строки таблицы значений путем загрузки в нее колонки с номерами строк. Это можно очень быстро сделать, используя "Порождающий запрос". Все необходимые функции очень компактны. Поэтому они приведены здесь.

Автор: ildarovich

// Возвращает текст запроса, формирующего таблицу чисел rN с одной колонкой X (eng), содержащую ряд: 0, 1, (N - 1).
function ProtoText(N, M = 1000000000) export
    return ?(N > 2
    , ProtoText(M - Int(M - Sqrt(N)))
    + strreplace(strreplace(";select top #2 a.X * #1 + b.X X into r#2 from r#1 a, r#1 b", "#2", format(N, "NG=")), "#1", format(M - Int(M - Sqrt(N)), "NG="))
    , "select 0 X into r2 union select 1")
endfunction

// Возвращает таблицу, содержащую последовательность чисел: 0, 1, 2, ..., (ЧислоСтрок - 1)
Функция ПоследовательностьЧиселТаблицей(ЧислоСтрок) Экспорт
    Запрос = Новый Запрос(СтрЗаменить(ProtoText(ЧислоСтрок), "into r" + format(ЧислоСтрок, "NG="), ""));
    Возврат Запрос.Выполнить().Выгрузить()
КонецФункции

// Возвращает массив, содержащий последовательность чисел: 0, 1, 2, ..., (ЧислоЭлементов - 1) 
Функция ПоследовательностьЧиселМассивом(ЧислоЭлементов) Экспорт
    Возврат ПоследовательностьЧиселТаблицей(ЧислоЭлементов).ВыгрузитьКолонку(0)
КонецФункции
0
Орфографическая ошибка в ProtoText (найдено 3): Proto
Орфографическая ошибка в strreplace (найдено 2): strreplace

См. также

Сжатое представление последовательности дат запросом

Определение пропусков в последовательности чисел

ЗаполнениеДанныхДляОграниченияДоступа (БСП)

ДополнитьТаблицуИзМассива (БСП)

Функция сравнения значений (рекурсивно)

ПриЗаполненииСправочниковЗаданий (БСП)

ПриЗаполненииСправочниковСообщений (БСП)

СкопироватьРекурсивно (БСП)

Модератору