Kokoelmat ja luettelot
Saatat joutua tilanteeseen, jossa sinulla on useampi kuin yksi tietyntyyppisistä tiedoista. Voit luoda muuttujan kullekin tiedolle tai ryhmitellä sen kaikki kokoelmaksi. Tietojen ryhmittely tuo sinulle etuja, kuten mahdollisuuden toteuttaa menetelmiä yksittäisten tietojen lisäksi koko kokoelmassa kokonaisuutena.
Kokoelmat
Ensimmäinen merkki siitä, että sinun on käytettävä kokoelmaa, on se, että sinulla on useita tietoja, jotka näyttävät olevan samaa tietotyyppiä. Saatat saada skenaarion, jossa merkintöjä on useita, kuten seuraavassa koodissa:
let logEntryMonday = "first entry"
let logEntryTuesDay = "second entry"
let logEntryWednesday = "third entry"
Tässä koodissa voit jatkaa yhden samankaltaisen merkinnän lisäämistä toisensa jälkeen, mutta jossain vaiheessa tämä lähestymistapa alkaa tuntua epätodennäköiseltä. Erilliset merkinnät eivät liity ainoastaan toisiinsa, vaan itse asiassa ne ovat samaa tyyppiä. Kannattaako kullekin merkinnälle luoda uusi muuttuja? Ei varmaankaan. Harkitse sen sijaan kokoelman käyttämistä, jossa voit luoda loogisen, hallittavan ryhmittelyn sekä lisätä tai poistaa tietoja tai käyttää jotain muuta toimintoa:
logEntriesWeek = ["first entry"; "second entry"; "third entry"]
Tämä koodi vaatii paitsi paljon vähemmän kirjoittamista, mutta se luo myös järjestyksen tunteen, jossa kaikki aiheeseen liittyvä ryhmitetetään yhteen.
Mitä F# voi tarjota sinulle? Ensinnäkin se tarjoaa kolme erityyppistä kokoelmaa, joista jokainen on suunniteltu tiettyyn tilanteeseen.
Luettelot: Luettelo F#:ssä on järjestetty, muuttumaton samantyyppisten elementtien joukko. Muuttumaton tarkoittaa sitä, että luettelo saattaa tarjota paremman suorituskyvyn kuin matriisi, mutta sinun on ehkä oltava luovempi, jos haluat muuttaa sen sisältöä. Voit esimerkiksi luoda uuden luettelon olemassa olevasta luettelosta. Tässä osiossa keskitytään luetteloiden käyttöön.
matriisien: Matriisit ovat kiinteän kokoisia, muunnettavia samantyyppisten tietoelementtien kokoelmia, jotka järjestetään peräkkäin nollapohjaisen indeksin kanssa. Muunnettava tarkoittaa, että tietoelementtejä on helppo lisätä ja poistaa, mutta suorituskyky saattaa kärsiä.
Jaksot-: Jakso on samantyyppisten elementtien looginen sarja. Jakso antaa juuri tähänastisen tunteen, koska se toimii hyvin suurissa tietokokoelmissa, joissa et aio käyttää kaikkia elementtejä. Se myös laskee elementtejä vain silloin, kun sitä vaaditaan. Näin ollen jaksot voivat tarjota paremman suorituskyvyn kuin luettelot tietyissä tilanteissa.
Listalle
Kuten olemme todenneet, luettelo on järjestetty, muuttumaton elementtien joukko. Luettelon voi luoda esimerkiksi seuraavilla tavoilla:
let cards = ["Ace"; "King"; "Queen"]
Tässä koodissa elementit sisällytetään hakasulkeisiin ([]) luettelon määrittelemiseksi. Luettelokohteet erotetaan toisistaan puolipisteellä (;).
Toinen tapa luoda luettelo on sijoittaa kukin elementti uudelle riville, kuten tässä on esitetty. Tämä menetelmä poistaa myös tarpeen käyttää puolipisteitä.
let cards = [
"Ace"
"King"
"Queen"
]
Luetteloissa elementtien on oltava samaa tyyppiä, joten seuraava esittely ei ole sallittu:
let cards = [ 1; "Ace"; "King" ] // not permitted
Tässä koodissa se ei ole sallittu, koska esittely yhdistää numeroita ja merkkijonoja. Toinen tapa luoda luettelo on käyttää alueen operaattoria (..). Ajatuksena on määrittää alku- ja lopetuselementit alueoperaattorilla (..) eroteltuna. Tämä luo kaikki luvut alusta loppuun, mukaan lukien niiden välillä olevat elementit. Voit esimerkiksi luoda 1 2 3 4 5 luvut käyttämällä seuraavaa koodia:
let numbers = [ 1 .. 5 ]
Luettelon muuttaminen
Kuten mainitsimme, luettelot ovat muuttumattomia, mikä tarkoittaa, että ne eivät voi muuttua. Ajattelemalla asiaa eri tavalla voit kuitenkin saada sen näyttämään siltä, että lisäät kohteen tai jopa luettelon kohteita luetteloon. Mitä tuo tarkoittaa? Katso seuraavaa esimerkkiä:
let cards = ["Ace"; "King"; "Queen"]
Edellinen koodi on luettelo, joka koostuu kolmesta merkkijonosta. Käyttämällä kaksoispistettä (::) -operaattoria voit liittää kohteen luettelon alkuun. Tuloksena on uusi luettelo, joka ei vaikuta vanhaan luetteloon:
let cards = ["Ace"; "King"; "Queen"]
let newList = "Jack" :: cards // "Jack", "Ace", "King", "Queen"
Voit myös lisätä kokonaisen luettelon käyttämällä at sign (@) -operaattoria seuraavassa esitetyllä tavalla:
let cards = ["Ace"; "King"; "Queen"]
let otherCardList = ["Jack"; "10"]
let fullList = cards @ otherCardList // "Ace", "King", "Queen", "Jack", "10"
Luettelomoduulissa on append() funktio, joka toimii sekä matriisi- että sekvenssikokoelmissa. On suositeltavaa käyttää append() jos esimerkiksi joudut vaihtamaan kokoelmatyypin luettelosta järjestykseen tai haluat välttää oppimasta uutta tapaa lisätä kohteita. At-merkin (@) käyttäminen elementtien lisäämiseksi luetteloon toimii vain luettelorakenteen kanssa. Palataan nyt kahteen esimerkkiin ja käytetään sen sijaan append():
let cards = ["Ace"; "King"; "Queen"]
let otherCardList = ["10"; "9"]
let fullList = cards |> List.append ["Jack"] // "Jack", "Ace", "King", "Queen"
let fullList = cards |> List.append otherCardList // "10", "9", "Ace", "King", "Queen"
Majoituspaikkaa
Luettelot F#:ssä otetaan käyttöön linkitettyinä luetteloina. Luettelo on rakenne, jossa kukin elementti on yhdistetty toiseen elementtiin. Muita opittavaa termejä ovat pään, joka on luettelon ensimmäinen elementti, ja hännän, joka sisältää elementit, jotka eivät ole päässä. Esimerkiksi luettelossa 1 2 3 4pää olisi 1 ja hännän pitäisi olla 2 3 4.
Erottamalla elementit tällä tavalla voit nopeasti käyttää ensimmäistä elementtiä, jotta voit lukea, poistaa tai suorittaa muita toimintoja sille. Voit käyttää mitä tahansa luettelon tiettyä kohdetta käyttämällä Item-ominaisuutta, joka ottaa nollaan perustuvan indeksin, kuten seuraavassa:
let list = [1; 2; 3; 4]
list.Item 1 // 2
Luettelon ominaisuudet on kuvattu seuraavassa taulukossa:
| Ominaisuus | Kuvaus |
|---|---|
| Pää | Luettelon ensimmäinen elementti |
| Tyhjä | Palauttaa tyhjän luettelon. voi käyttää, kun haluat luoda tyhjän luettelon |
| IsEmpty | Tarkistaa, onko nykyinen luettelo tyhjä. |
| Kohta | Noutaa nykyisen elementin määritetyssä sijainnissa (nollaan perustuva indeksi) |
| Pituus | Palauttaa luettelon kohteiden määrän |
| Häntä | Palauttaa kaikki muut paitsi luettelon ensimmäisen elementin. |