آر

آرایه در 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 تمرین دیگر را باز کنید