Az array az F#-ban nulla vagy több értékből álló, rögzített hosszúságú, módosítható gyűjtemény. Ez azt jelenti, hogy miután létrehoztál egy tömböt, a mérete nem változhat, de az értékei igen. Egy tömbben minden értéknek ugyanolyan típusúnak kell lennie. A tömböket így definiálhatod:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
Az elemeket index használatával rendelhetsz hozzá egy tömbhöz, illetve kérdezhetsz le belőle. Az F# tömbjei nullától indexeltek, ami azt jelenti, hogy az első elem indexe mindig nulla:
let numbers = [| 2; 3; 5 |]
// Update value in array
numbers[2] <- 9
// Read value from array
numbers[2]
// => 9
A tömböket vagy az Array modulban definiált függvényekkel és operátorokkal módosíthatod, vagy kézzel, az array mintát használó mintaillesztéssel:
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"
Mintaillesztéskor egy értéket el is dobhatsz; ha egy adott esetben nem érdekel egy érték (azaz nem fogod használni), egy alulvonással ('_') jelezheted ezt:
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)"
Az egyetlen '_' mintaillesztéskor mindig utolsóként szerepeljen; minden olyan értéket, amely nem illeszkedik a többi eset egyikére sem, ez az eset kezel.
Szenvedélyes madármegfigyelő vagy, aki számontartja, hány madár járt a kertedben az elmúlt hét napban.
Hat részfeladat vár rád, és mindegyik a kertedbe látogató madarak számával foglalkozik.
Hogy legyen mihez hasonlítanod, mindig magadnál tartod a múlt heti számok másolatát, amelyek ezek voltak: 0, 2, 5, 3, 7, 8 és 4. Definiáld a lastWeek kötést, amely a múlt heti számokat tartalmazza:
lastWeek
// => [| 0; 2; 5; 3; 7; 8; 4 |]
Készítsd el a yesterday függvényt, amely visszaadja, hány madár járt a kertedben tegnap. A madárszámok nap szerint követik egymást: az első elem a legrégebbi naphoz tartozó szám, az utolsó pedig a mai.
yesterday [| 3; 5; 0; 7; 4; 1 |]
// => 4
Készítsd el a total függvényt, amely visszaadja, összesen hány madár járt a kertedben:
total [| 3; 5; 0; 7; 4; 1 |]
// => 20
Készítsd el a dayWithoutBirds függvényt, amely true-t ad vissza, ha volt olyan nap, amikor nulla madár járt a kertben; egyébként false-t ad vissza:
dayWithoutBirds [| 3; 5; 0; 7; 4; 1 |]
// => true
Készítsd el az incrementTodaysCount függvényt, amely megnöveli a mai nap számát, és visszaadja a frissített számokat:
let birdCount = [| 3; 5; 0; 7; 4; 1 |]
incrementTodaysCount birdCount
// => [| 3; 5; 0; 7; 4; 2 |]
Az elmúlt év során rájöttél, hogy néhány hét ugyanazt a szokatlan mintázatot mutatja:
Készítsd el az unusualWeek függvényt, amely true-t ad vissza, ha az idei hét madárszám-mintázata megegyezik valamelyik szokatlan mintázattal:
unusualWeek [| 1; 0; 5; 0; 12; 0; 2 |]
// => true
unusualWeek [| 5; 0; 5; 12; 5; 3; 5|]
// => true
(Figyeld meg, hogy a napok paritása 1-től indexelt, nem 0-tól: a tömb első eleme egy páratlan napnak felel meg)
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) F# nyelvet 18 fogalom148 feladat segítségével, valódi emberi mentorálással, mindez ingyen.