المصفوفة 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)"
ينبغي أن تأتي الشرطة السفلية الواحدة '_' دائمًا في الآخر عند مطابقة الأنماط، فأي قيمة لا تطابق أي من الحالات الأخرى ستتعامل معها هذه الحالة.