Функция дальности в М? - PullRequest
       82

Функция дальности в М?

0 голосов
/ 26 января 2020

Можно ли создать числовой диапазон в М? Например что-то вроде:

let
    x = range(1,10) // {1,2,3,4,5,6,7,8,9,10}, from 1 to 10, increment by 1
    x = range(1,10,2) // {1,3,5,7,9}, from 1 to 10, increment by 2

1 Ответ

2 голосов
/ 26 января 2020

Для простого сценария ios, a..b может быть подходящим. Некоторые примеры:

let
    firstList = {1..10}, // {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    secondList = {1, 5, 12, 14..17, 18..20}, // {1, 5, 12, 14, 15, 16, 17, 18, 19, 20}
    thirdList = {Character.ToNumber("a")..100, 110..112}, // {97, 98, 99, 100, 110, 111, 112}
    fourthList = {95..(10 * 10)} // {95, 96, 97, 98, 99, 100}
in
    fourthList

В противном случае, возможно, попробуйте пользовательскую функцию, которая внутренне использует List.Generate:

let
    range = (inclusiveStart as number, inclusiveEnd as number, optional step as number) as list => 
        let
            interval = if step = null then 1 else step,
            conditionFunc = 
                if (interval > 0) then each _ <= inclusiveEnd
                else if (interval < 0) then each _ >= inclusiveEnd
                else each false,
            generated = List.Generate(() => inclusiveStart, conditionFunc, each _ + interval)
        in generated,
    firstList = range(1, 10), // {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    secondList = range(1, 10, 2), // {1, 3, 5, 7, 9}
    thirdList = range(1, 10 , -1), // {} due to the combination of negative "step", but "inclusiveEnd" > "inclusiveStart"
    fourthList = range(10, 1, 0), // {} current behaviour is to return an empty list if 0 is passed as "step" argument.
    fifthList = range(10, 1, -1), // {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}
    sixthList = range(10, 1, 1) // {} due to the combination of positive "step", but "inclusiveEnd" < "inclusiveStart"
in
    sixthList

Вышеупомянутая функция range должна иметь возможность генерировать оба восходящие и нисходящие последовательности (см. примеры в коде).


В качестве альтернативы, вы можете создать пользовательскую функцию, которая использует List.Numbers для внутреннего использования, сначала рассчитав, каким должен быть аргумент count. Но я выбрал go с List.Generate.

...