2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Esittelimme edellisessä artikkelissamme, että tätä ei pitäisi harjoitella.continue
Lauseke parillisten lukujen summan laskemiseksi 100:n sisällä. Kun kirjoitamme koodia,continue
lauseke auttaa meitä ohittamaan tietyt iteraatiot, joita ei tarvita, esimerkiksi tässä esimerkissä ohitamme kaikki parittomat luvut.
- sum := 0
- for i := 1; i < 100; i++{
- if i & 1 == 0 {
- continue
- }
- sum += i
- }
-
- fmt.Println("the sum is",sum)
Ohjelmoinnissa joudumme usein käsittelemään samantyyppisiä elementtejä, ja näitä elementtijoukkoja edustavat tietyt tietorakenteet Go-kielessä. Tänään esittelen sinulle useita kokoelmatyyppejä Gossa yksityiskohtaisesti: array, slice ja map.
Aloitetaan ensin taulukoista. Taulukko on Go:n perustietorakenne. Se on samantyyppisten elementtien kiinteäpituinen sarja. Kun taulukko on ilmoitettu, sen pituutta ei voi muuttaa. Taulukon ilmoittaminen ja alustus ovat hyvin yksinkertaisia,
Kun määrität taulukon, sinun on määritettävä taulukon tyyppi ja pituus. Näin taulukko ilmoitetaan:
var arrayName [arrayLength]elementType
Ilmoita esimerkiksi kokonaislukutaulukko, jonka pituus on 5:
var numbers [5]int
Voit alustaa taulukon useilla tavoilla:
var numbers = [5]int{1, 2, 3, 4, 5}
:=
Lyhyt lausunto:numbers := [5]int{1, 2, 3, 4, 5}
numbers := [...]int{1, 2, 3, 4, 5}
numbers := [5]int{0: 1, 4: 5}
Voit käyttää taulukon elementtejä indeksin perusteella, alkaen 0:sta:
value := numbers[2] // 获取索引为 2 的元素
voit käyttääfor
Selaa kaikkia taulukon elementtejä:
- for i, value := range numbers {
- fmt.Printf("Index: %d, Value: %dn", i, value)
- }
Voit käyttää sisäänrakennettualen
Funktio taulukon pituuden saamiseksi:
length := len(numbers)
Jos taulukkoa ei ole nimenomaisesti alustettu, sen elementit asetetaan automaattisesti tyypin nolla-arvoon. Esimerkiksi kokonaislukutaulukon nolla-arvo on 0:
var numbers [5]int // 所有元素都是 0
Go-kieli tukee myös moniulotteisia taulukoita. Seuraavassa on esimerkki 2x3 kokonaislukutaulukon ilmoittamisesta ja alustamisesta:
- var matrix [2][3]int
- matrix = [2][3]int{{1, 2, 3}, {4, 5, 6}}
Koska taulukon pituus on kiinteä, tämä ei välttämättä ole kovin joustava joissakin tapauksissa. Jos tarvitset vaihtelevan pituuden kokoelman, voit käyttää viipaleita.
Seuraava on slice, joka on joustavampi sisäänrakennettu tyyppi, jota voidaan pitää dynaamisena taulukona. Viipaleen pituus on vaihteleva ja se luodaan taulukon perusteella, mikä lisää mukavuutta. Voit ilmoittaa ja alustaa viipaleen seuraavasti:
- s := make([]int, 3) // 创建一个长度为3的整型切片
- s[0] = 1 // 切片元素赋值
- s[1] = 2
- s[2] = 3
- s = append(s, 4) // 向切片追加元素
Go-kielessä, vaikka taulukoita ja viipaleita käytetään molempien samantyyppisten elementtien sarjan tallentamiseen, niillä on merkittäviä eroja muistin varaamisessa, koon vaihtelussa ja käytössä. Tässä ovat tärkeimmät erot taulukoiden ja viipaleiden välillä:
[3]int
ja[4]int
ovat eri tyyppejä.[]int
On yleinen tyyppi kaikille kokonaislukuviipaleille.make
Alustettava funktio tai lohko taulukosta, kokoa ei ole määritetty.Tässä on esimerkkejä taulukoiden ja osien alustamisesta:
- // 数组
- var arr [3]int = [3]int{1, 2, 3}
-
- // 切片
- var slice []int = []int{1, 2, 3}
- // 或者使用 make 函数
- slice := make([]int, 3)
append
Funktio lisää elementtejä tai hankkii osaviipaleita leikkaustoimintojen avulla.Viipaleen alla oleva matriisi voidaan varata kasaan, ja viipaleen elementteihin pääsyn aika monimutkaisuus on myös O(1), muttaappend
Saattaa johtaa taustalla olevan taulukon uudelleenallokointiin, mikä on tyypillisesti O(n)-operaatio.Lopuksi katsotaan kartoitus. Kartta on Go:ssa assosiatiivinen taulukko, joka kartoittaa avaimet arvoihin. Kartan avaimet voivat olla mitä tahansa yhtäläisyysoperaattorin tukemaa tyyppiä, kuten kokonaislukuja, liukulukuja, merkkijonoja, osoittimia, rajapintoja (kunhan rajapinnan sisältämät arvot ovat vertailukelpoisia), rakenteita ja taulukoita. Kartoitettu arvo voi olla mitä tahansa tyyppiä.
Kartan ilmoittamisen syntaksi on seuraava:
var mapName map[keyType]valueType
Määritä esimerkiksi kartta, jossa avaimet ovat merkkijonoja ja arvot kokonaislukuina:
var scores map[string]int
Kartan ilmoittamisen jälkeen sinun on läpäistävämake
toiminto alustaaksesi sen, jotta sitä voidaan käyttää:
scores = make(map[string]int)
Vaihtoehtoisesti voit käyttää lyhyttä ilmoitusta ja alustaa:
scores := make(map[string]int)
Voit myös käyttää literaaleja alustukseen ilmoitushetkellä:
- scores := map[string]int{
- "alice": 90,
- "bob": 85,
- "charlie": 88,
- }
scores["alice"] = 90
value := scores["alice"]
Jos avainta ei ole olemassa, tälle arvotyypille palautetaan nolla-arvo.
Voit käyttää pilkkua -ok idiomia tarkistaaksesi, onko avain olemassa kartassa:
- value, exists := scores["alice"]
- if exists {
- // 键存在
- } else {
- // 键不存在
- }
käyttäädelete
Funktio voi poistaa avain-arvo-parin kartalta:
delete(scores, "alice")
Jos avainta ei ole,delete
Toiminto ei tee mitään.
käyttääfor
Silmukka voi kulkea kaikkien kartan avainarvoparien läpi:
- for key, value := range scores {
- fmt.Printf("%s: %dn", key, value)
- }
Kartan nolla-arvo onnil
.yksinil
Kartalla ei ole taustalla olevaa tietorakennetta, eikä siihen voi lisätä elementtejä.Ennen kuin lisäät elementtejä karttaan, sinun on käytettävämake
Alusta se.
Voit käyttää sisäänrakennettualen
Toiminto avainarvo-parien määrän saamiseksi kartalle:
length := len(scores)
Kartan avaimet voivat olla mitä tahansa vertailukelpoisia tyyppejä, kuten kokonaislukuja, liukulukuja, merkkijonoja, osoittimia, rajapintoja (kunhan käyttöliittymän sisältämät arvot ovat vertailukelpoisia), rakenteita, taulukoita jne. Viipaleita, karttoja ja toimintoja ei voi käyttää karttaavaimina, koska nämä tyypit eivät tue tasa-arvovertailuja.
Go-kielessä taulukot, viipaleet ja kartat ovat kolme yleisesti käytettyä tietorakennetta, joilla jokaisella on erilaiset ominaisuudet ja näkökohdat. Tässä on muutamia huomioitavia kohtia niitä käytettäessä:
nil
, on alustettava ennen käyttöä.nil
,nil
Karttaa ei voi käyttää avain-arvo-parien tallentamiseen, ja se on alustettava ennen käyttöä.delete
Olemattoman avaimen poistaminen ei aiheuta virhettä, mutta avaimen olemassaolo on turvallista tarkistaa.