Паттерны массивов и списков

Последнее обновление: 14.12.2023

Паттерны массивов/списков (list pattern) позволяют сопоставлять выражения со списками и массивами.

Полное совпадение с массивом/списком:

let getNumber values = 
    match values with
    | [|1; 2; 3; 4|] -> 4
    | [|1; 2; 3|] -> 3
    | [|1; 2|] -> 2
    | [|1|] -> 1
    | _ -> 0

printfn "%d" (getNumber [|1; 2; 3; 4|])     // 4
printfn "%d" (getNumber [|1; 2; 3|])        // 3
printfn "%d" (getNumber [|1; 2|])           // 2
printfn "%d" (getNumber [|1|])              // 1
printfn "%d" (getNumber [|1; 2; 5|])        // 0

Аналогично вместо массивов можно применять списки:

let getNumber2 values = 
    match values with
    | [1; 2; 3; 4] -> 4
    | [1; 2; 3] -> 3
    | [1; 2] -> 2
    | [1] -> 1
    | _ -> 0

printfn "%d" (getNumber2 [1; 2; 3; 4])     // 4
printfn "%d" (getNumber2 [1; 2; 3])        // 3
printfn "%d" (getNumber2 [1; 2])           // 2
printfn "%d" (getNumber2 [1])              // 1
printfn "%d" (getNumber2 [1; 2; 5])        // 0

Подстановка _

С помощью паттерна _ можно обозначить одиночный элемент, который имеет любое значение. Например, паттерн [2, _, 5] соответствует любому массиву из трех элементов, в котором между 2 и 5 располагается произвольное значение. А массив [_, _] соответствует любому массиву из двух произвольных элементов

Несколько примеров:

let getNumber values = 
    match values with
    | [2; _; 5] -> 1
    | [2; _; _] -> 2
    | [_; _; 5] -> 3
    | [_; _; _] -> 4
    | _ -> 5

printfn "%d" (getNumber [ 2; 3; 5])       // 1
printfn "%d" (getNumber [ 2; 4; 6 ])      // 2
printfn "%d" (getNumber [ 1; 2; 5 ])      // 3
printfn "%d" (getNumber [ 1; 2; 3])      // 4
printfn "%d" (getNumber []);         // 5

Получение элементов в переменные

Отдельные значения массива/списка можно получить в переменные, например:

let printNumbers values = 
    match values with
    | [first; second; _; last] -> (printfn "first: %d; second: %d; last: %d" first second last)
    | _ -> ()          // произвольное количество элементов

printNumbers [ 2; 3; 4; 5 ]     // first: 2;  second: 3;  last: 5

В данном случае получаем первый элемент массива в переменную first, второй элемент - в переменную second, а последний элемент - в переменную last.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850