Swift Academy · Oppitunti

Kokoelmat

Kokoelmat

Oppitunti 1/122 vaihetta

Kokoelmat on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/1. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 1 oppituntia.

Johdanto

Hei,

Tässä oppitunnissa tutustumme Swiftin kokoelmatyyppeihin, jotka ovat yksi tärkeimmistä aiheista.

Aloitetaan siis.

Swiftissä on kolme kokoelmatyyppiä.

Array → Järjestyksessä oleva kokoelmatyyppi.

Set → Järjestämätön kokoelmatyyppi, jonka arvot ovat yksilöllisiä.

Dictionary → Järjestyksetön avain–arvo-pareihin perustuva kokoelmatyyppi.

Muuttuva – muuttumaton

Se, ovatko kokoelmatyyppimme muuttumattomia vai muokattavia, määräytyy määrittelytavan perusteella.

Jos määrittelemme kokoelman let-lausekkeella, se on muuttumaton, kun taas var-määrittely tekee siitä muokattavan.

Jos määrittelemämme arvo ei muutu myöhemmin, letin käyttö antaa kääntäjälle mahdollisuuden optimoida suoritusta tehokkaammin.

Array

Array on kokoelmatyyppi, jota käytetään tietojen säilyttämiseen järjestyksessä. Swift 3 -versiosta lähtien Arrayn kaikkien alkioiden ei tarvitse olla samaa tyyppiä.

Yksinkertaisen Array-määrittelyn syntaksi näkyy alla olevassa esimerkissä.

// Let's create an empty array.
var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// Prints "someInts is of type [Int] with 0 items."

Taulukon luominen oletusarvolla

Joissakin tilanteissa haluamme luoda tietynkokoisen taulukon, jonka kaikilla alkioilla on oletusarvo. Tätä varten Array-konstruktorille on välitettävä kaksi argumenttia.

Nämä argumentit määrittävät oletusarvon ja taulukon alkioiden määrän.

var threeDoubles = Array(repeating: 0.0, count: 3)
print(threeDoubles)
// threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]

var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
print(anotherThreeDoubles)

var sixDoubles = threeDoubles + anotherThreeDoubles
print(sixDoubles)
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

Arrayn luominen Array Literalin avulla

Edellisessä esimerkissä opimme luomaan tyhjän Arrayn. Joissakin tapauksissa saatamme kuitenkin haluta luoda Arrayn Array Literalin avulla.

Tutustutaan sen käyttöön esimerkin avulla.

/*
We have defined a variable named catList, 
and with the [String] statement we specified 
that its type is an Array containing String elements.
*/
var catList: [String] = ["Garfield", "Tom"]
print(catList)
/*
It will understand that the array is an Array containing
String statements, since we assign a value that 
defines the variable. (Swift type inference)
*/
var shoppingList = ["Eggs", "Milk"]
print(shoppingList)

Arrayn arvon käyttäminen

Kun haluamme käyttää tietyn indeksin alkiota järjestyksessä olevasta kokoelmasta, riittää, että käytämme seuraavaa syntaksia.

myArray [index]

Tarkastellaan esimerkkiä.

// We have defined an array with 3 elements of type Int.
var numbers:[Int] = [1, 5, 21]

// Arrays start from Index 0. For example, in order to reach the value 5, which is the 2nd element, we need to access the 1st index.
var a = numbers[1]
print( "Value of numbers at index 1 is \(a)" )

Uusien alkioiden lisääminen Arrayhin

Voimme lisätä uuden alkion Arrayhin. 

Alla määritellään catList-niminen Array. Seuraavassa vaiheessa tähän Arrayhin lisätään uusi alkio append-metodilla. 

// The Array named catList was defined with 1 initial element.
var catList = ["Tom"]


/*
We are adding a new item with a Garfield 
value using the append method.
*/
catList.append("Garfield")
// Our array will now have 2 elements.


/*
With the + = operator, we can do the 
work that the append method does.
*/
catList += ["Sylvester"]

Datan lisääminen Arrayn tiettyyn indeksiin

Edellisessä esimerkissä append-metodilla lisäämäni arvo lisätään Arrayn loppuun. Joskus saatamme kuitenkin haluta lisätä arvon tiettyyn indeksiin. Tällöin käytämme insert-metodia.

Syntaksi näyttää tältä.

myArr.insert ("The data to add", at: index);

Selvitetään asia esimerkin avulla.

var catList = ["Tom"]

catList.insert("Garfield", at: 1)

print(catList)

Tietyn alkion poistaminen Arraysta

remove-metodilla poistetaan Arrayn tietyssä indeksissä oleva alkio.

var shoppingList = ["Apple", "Cherry", "Cheese"]

let shoppingListOne = shoppingList.remove(at: 0)
// the item that was at index 0 has just been removed
// the mapleSyrup constant is now equal to the removed "Maple Syrup" string

let shoppingListTwo = shoppingList.removeLast()
// the last item in the array has just been removed

print(shoppingListTwo)

Taulukon läpikäynti

Voimme käydä hallussamme olevan taulukon läpi for-in-lauseella.

Tutustutaan esimerkkiin.

var shoppingList = ["Banana", "Orange", "Milk"]

for item in shoppingList {
    print(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

for (index, value) in shoppingList.enumerated() {
    print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas

Setit

Niitä käytetään saman tyypin arvojen kokoamiseen yhteen ilman järjestystä.

Kuten nimestä voi päätellä, kyseessä on joukko. Joukossa ei voi olla kahta samaa arvoa.

Tyhjän Setin luominen

Tyhjä Set luodaan seuraavan esimerkin avulla.

var catSet = Set<Character>()

Setien luominen taulukkoliteraalilla

Set voidaan luoda taulukkoliteraalilla. Huomaa, että vaikka tähän sijoitettu arvo näyttää taulukolta, muuttujan tyyppi on Set <String>.

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

Varoitus

Taulukkoliteraalia käytettäessä Setiä ei voi luoda määrittelemättä tyyppiä. Muuten se voidaan tulkita Arrayksi. Siksi tyyppi on määritettävä. 

Vähintään se on kirjoitettava seuraavasti.

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

Setin metodit

Tutustutaan esimerkkiin

var favoriteGenres = ["Funk"]

print("I have \(favoriteGenres.count) favorite music genres.")

if favoriteGenres.isEmpty {
    print("favoriteGenres is empty")
} else {
    print("I have particular music preferences.")
}

if favoriteGenres.contains("Funk") {
    print("Funk")
} 

Setin läpikäynti

Swiftin Set-tyypillä ei ole järjestystä. Set-arvoja läpikäytäessä voidaan kuitenkin käyttää sorted-metodia. Tämä metodi muuntaa Setin alkiot taulukoksi.

let favoriteGenres = ["Classical","Jazz", "Hip hop"]

for genre in favoriteGenres {
    print("\(genre)")
}
// Classical
// Jazz
// Hip hop

Dictionary

Dictionary on kokoelmatyyppi, joka säilyttää arvot avain–arvo-pareina eikä sisällä järjestystä.

Jokainen arvo tallennetaan yksilöllisen avaimen kanssa. Avain toimii kyseisen Dictionary-arvon tunnisteena. Dictionary ei sisällä Arrays-tyyppistä järjestystä. Sitä voi ajatella tosielämän sanakirjan tavoin.

Siksi jokaisen arvon tunniste on järjestystä tärkeämpi.

Dictionary-tyyppi voidaan määritellä lyhyellä muodolla [Key: Value]. Lyhyttä muotoa käytetään mieluummin.

var namesOfIntegers = [Int: String]()
// namesOfIntegers is an empty [Int: String] dictionary

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type [Int: String]

Dictionaryn käyttömetodit

Dictionaryn sisältämien alkioiden määrän voi selvittää count-metodilla.

Lisäksi Dictionaryn tyhjyyden voi tarkistaa isEmpty-metodilla.

Tehdään näistä metodeista muutama esimerkki.

var airports = ["LHR": "London", "IST": "Istanbul"]

print("The airports dictionary contains \(airports.count) items.")
// Prints "The airports dictionary contains 2 items."

if airports.isEmpty {
    print("The airports dictionary is empty.")
} else {
    print("The airports dictionary is not empty.")
}
// Prints "The airports dictionary is not empty."

airports["LHR"] = "London"
// the airports dictionary now contains 3 items

Subscript

Subscriptin avulla arvo haetaan seuraavasti. Palautettava tulos on optional.

var airports = ["DUB":"Dublin"]

if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName).")
} else {
    print("That airport is not in the airports dictionary.")
}
// Prints "The name of the airport is Dublin Airport."



//Deletion
airports["APL"] = nil

if let removedValue = airports.removeValue(forKey: "DUB") {
    print("The removed airport's name is \(removedValue).")
} else {
    print("The airports dictionary does not contain a value for DUB.")
}
// Prints "The removed airport's name is Dublin Airport."

Dictionaryn päivittäminen

Edellä käytetyn subscriptin lisäksi Dictionaryn päivittämiseen on olemassa oma metodi.

Tämän metodin erityispiirre on, että päivityksen jälkeen se palauttaa arvon, joka oli voimassa ennen päivitystä.

var airports = ["DUB": "Dublin"]

if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    print("The old value for DUB was \(oldValue).")
}
// Prints "The old value for DUB was Dublin."

Esimerkki Dictionaryn muuntamisesta Arrayksi

Alla on esimerkki Dictionaryn muuntamisesta Arrayksi.


let airports = ["IST":"Istanbul Airport", "DUB":"Dublin Airport"]

let airportCodes = [String](airports.keys)
print(airportCodes)

let airportNames = [String](airports.values)
print(airportNames)

Onnittelut

Onnittelut 🎉

Tässä oppitunnissa opimme käyttämään kokoelmia Swiftissä.

Nähdään seuraavassa oppitunnissa.

Kokoelmat — kuvitus 22
Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”Kokoelmat” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Kokoelmat”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 1 oppituntia.

Mitä opin oppitunnilla ”Kokoelmat”?

Kokoelmat Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/1.

Kuinka kauan ”Kokoelmat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

← Takaisin: Swift Academy