Ма

Масиви у F#

3 вправи

Про концепцію Масиви

array у F# - це змінювана колекція, яка містить нуль або більше значень і має фіксовану довжину. Це означає, що після створення масиву його розмір змінити не можна, а значення - можна. Усі значення в масиві мають бути одного типу. Масиви можна визначати так:

let empty = [| |]
let emptyAlternative = Array.empty

let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5

let threeValues = [| "a"; "b"; "c" |]

Елементи можна присвоювати масиву або отримувати з нього за допомогою індексу. Масиви у F# мають відлік від нуля: індекс першого елемента завжди дорівнює нулю:

let numbers = [| 2; 3; 5 |]

// Update value in array
numbers[2] <- 9

// Read value from array
numbers[2]
// => 9

Для роботи з масивами використовують функції та оператори, визначені в модулі Array. Деякі з цих функцій також доступні як властивості примірника array:

Array.length [| 7; 8 |] // => 2
[| 7; 8 |].Length       // => 2

Тут немає правильного чи неправильного варіанта. Загалом функції з модуля Array краще працюють із виведенням типів, тоді як властивості дають змогу писати стисліший код.

Зразок масиву дає змогу застосовувати зіставлення зі зразком до масивів:

let describe array =
    match array with
    | [| |] -> "Empty"
    | [| 1; 2; three |] -> sprintf "1, 2, %d" three
    | _ -> "Other"

describe [| |]         // => "Empty"
describe [| 1; 2; 4 |] // => "1, 2, 4"
describe [| 5; 7; 9 |] // => "Other"

Також під час зіставлення зі зразком можна відкинути значення: коли значення в конкретному випадку не має значення (тобто ми не збираємося його використовувати), можна позначити це знаком підкреслення ('_'):

let describe array =
    match array with
    | [| |] -> "Empty array"
    | [| x |] -> "Array with one item"
    | [| _; y |] -> "Array with two items (first item ignored)"
    | _ -> "Array with many items (all items ignored)"

describe [| |]          // => "Empty array"
describe [| 1 |]        // => "Array with one item"
describe [| 5; 7 |]     // => "Array with two items (first item ignored)"
describe [| 5; 7; 9 |]  // => "Array with many items (all items ignored)"

Під час зіставлення зі зразком єдиний '_' завжди має стояти останнім: будь-яке значення, що не збігається з жодним з інших випадків, оброблятиме саме цей випадок.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Масиви

Практика заблокована

Розблокуйте ще 2 вправи, щоб практикувати концепцію Масиви