Swift Academy · Lektion

Samlingar

Samlingar

Lektion 1 av 122 steg

Samlingar är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 1 av 1. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 1 lektioner.

Introduktion

Hej!

I den här lektionen lär vi oss om collection-typer i Swift, som är ett av de viktigaste ämnesområdena.

Vi börjar.

Det finns tre collection-typer i Swift.

Array → Sekventiella samlingstyper.

Set → Oordnade samlingstyper med unika värden.

Dictionary → Oordnade samlingstyper med nyckel–värde-par.

Föränderlig – oföränderlig

Om våra samlingstyper är oföränderliga eller föränderliga avgörs av hur vi definierar dem.

Om vi definierar en samling med en let-sats är den oföränderlig, medan den är föränderlig om vi definierar den med var.

Om det definierade värdet inte ska ändras senare ger användning av let kompilatorn en prestandafördel genom att koden kan köras mer optimerat.

Array

Array är den samlingstyp som används för att lagra data sekventiellt. Sedan Swift 3 behöver inte alla element i en Array vara av samma typ.

Syntaxen för en enkel Array-definition visas i exemplet nedan.

// 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."

Skapa en array med ett standardvärde

I vissa fall kan vi vilja skapa en array med ett standardvärde och en bestämd storlek. Då måste vi skicka två argument till Array-konstruktorn.

Argumenten anger vilket standardvärdet är och hur många element arrayen ska innehålla.

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]

Skapa en Array med en Array Literal

I det föregående exemplet lärde vi oss att skapa en tom Array. I vissa fall kanske vi dock vill skapa en Array med en Array Literal.

Vi lär oss hur den används i exemplet.

/*
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)

Åtkomst till ett värde i en Array

När vi vill nå ett element på ett visst index i en sekvens räcker det att använda följande syntax.

myArray [index]

Vi tittar på exemplet.

// 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)" )

Lägga till nya element i en Array

Vi kan lägga till ett nytt element i en Array. 

I exemplet nedan definieras en Array med namnet catList. I nästa steg har ett nytt element lagts till i denna Array med metoden append. 

// 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"]

Lägga till data på ett visst index i en Array

Värdet som jag lade till med metoden append i det föregående exemplet läggs till sist i Array. Ibland kanske vi dock vill lägga till det på ett visst index. Då använder vi metoden insert.

Syntaxen ser ut så här.

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

Vi tar reda på det med ett exempel.

var catList = ["Tom"]

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

print(catList)

Ta bort ett visst element i en Array

Metoden remove används för att ta bort ett element på ett visst index i en Array.

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)

Iteration över en array

Vi kan iterera över en array med for-in.

Låt oss titta på exemplet.

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

Mängder

Används för att hålla samlingar av samma typ tillsammans utan inbördes ordning.

Som namnet antyder är de mängder. Det kan inte finnas två element med samma värde i mängden.

Skapa en tom mängd

Vi använder följande exempel för att skapa en tom mängd.

var catSet = Set<Character>()

Skapa mängder med en arrayliteral

En arrayliteral kan användas för att skapa en mängd. Observera att även om värdet som tilldelas här ser ut som en array, är variabeltypen Set <String>.

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

Varning

När en arrayliteral används går det inte att skapa en mängd utan att definiera en typ. Det kan förväxlas med en Array. Därför måste vi definiera typen. 

Åtminstone bör vi använda den på följande sätt.

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

Set-metoder

Låt oss titta på exemplet

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")
} 

Iterera över en mängd

Swift-typen Set har ingen ordning. När man itererar över ett Set-värde kan man dock använda metoden sorted. Denna metod omvandlar mängdens element till en array.

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

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

Dictionary

Dictionary är en samlingstyp som lagrar värden som nyckel-värde-par och inte har någon ordning.

Varje värde lagras med en unik nyckel. Den representerar värdets ID i dictionaryn. Den innehåller inte någon sekvens, till skillnad från arrayer. Vi kan tänka på den som en ordbok i verkligheten.

Därför är varje värdes identitet viktigare än ordningen.

Dictionary-typen kan definieras med kortformen [Key: Value]. Kortformen används oftare.

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]

Metoder för att komma åt en dictionary

Vi kan ta reda på hur många element en dictionary innehåller med metoden count.

Dessutom kan vi kontrollera om dictionaryn är tom med metoden isEmpty.

Låt oss göra några exempel med dessa metoder.

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

Så här hämtar man ett värde med subscript. Resultatet returneras som ett 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."

Uppdatera en dictionary

Förutom att använda subscriptet ovan finns det en metod för att uppdatera dictionaryn.

Det speciella med den här metoden är att den, efter uppdateringen, returnerar det gamla värdet.

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."

Ett exempel på hur man konverterar från Dictionary till Array finns nedan

Ett exempel på hur man konverterar från Dictionary till Array finns nedan.


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

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

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

Grattis

Grattis 🎉

I den här lektionen lärde vi oss hur Collections används i Swift.

Vi ses i nästa lektion.

Samlingar — illustration 22
Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”Samlingar” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Samlingar”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 1 lektioner.

Vad lär jag mig i ”Samlingar”?

Samlingar Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 1.

Hur lång tid tar lektionen ”Samlingar”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

← Tillbaka till Swift Academy