20. slice 繼續(xù)

slice是一個(gè)序列的值悯森,可以根據(jù)序列號(hào)來(lái)訪問(wèn)⌒髂欤可以使用 len(s) 返回 slice s 的長(zhǎng)度瓢姻。
寫(xiě)一個(gè)例子,利用 for 循環(huán)音诈,打印出 slice 的每一個(gè)值幻碱。利用下標(biāo)來(lái)訪問(wèn)每一個(gè)值绎狭。

package main

import (
    "fmt"
)

func main() {
    s := []int{1,1,2,3,5,8,13,21,34}
    fmt.Println("slice s is", s)
    for i := 0; i < len(s); i++ {
        fmt.Printf("s[%d] == %d\n", i, s[i])
    }
}

運(yùn)行結(jié)果

slice s is [1 1 2 3 5 8 13 21 34]
s[0] == 1
s[1] == 1
s[2] == 2
s[3] == 3
s[4] == 5
s[5] == 8
s[6] == 13
s[7] == 21
s[8] == 34

slice的構(gòu)成元素可以是任何類型,甚至也可以是其他slice褥傍。
比如:

game := [][]string{
        []string{"_","_","_"},
        []string{"_","_","_"},
        []string{"_","_","_"},
        []string{"_","_","_"},
        []string{"_","_","_"},

    }

slice game的元素類型是 []string 的slice儡嘶。
請(qǐng)看完整代碼

package main

import (
    "fmt"
    "strings"
)

func main() {
    //填字游戲
    game := [][]string{
        []string{"_","_","_"},
        []string{"_","_","_"},
        []string{"_","_","_"},
        []string{"_","_","_"},
        []string{"_","_","_"},

    }
    //玩家填寫(xiě)的內(nèi)容
    game[0][0] = "X"
    game[0][1] = "X"
    game[0][2] = "X"

    game[1][0] = "Y"
    game[1][1] = "Y"
    game[1][2] = "Y"

    game[2][0] = "Z"
    game[2][1] = "Z"
    game[2][2] = "Z"

    printGame(game)
}

func printGame(game [][]string)  {
    for i := 0; i < len(game); i++ {
        fmt.Printf("%s\n", strings.Join(game[i], "  "))
    }
}

運(yùn)行看看結(jié)果

X   X   X
Y   Y   Y
Z   Z   Z
_   _   _
_   _   _

任何一個(gè)slice都是對(duì)數(shù)組的一個(gè)切片后的使用。而且摔桦,它不影響原數(shù)組的值社付。
slice也可以重新切片。
像這樣

package main

import (
    "fmt"
)

func main() {
    s := []int{1,1,2,3,5,8,13,21,34,55}
    fmt.Println("s ==", s)
    fmt.Println("s[1:4] ==", s[1:4])
    fmt.Println("s[2:5] ==", s[2:5])

    //省略的寫(xiě)法邻耕, : 符號(hào)左邊省略,表示從0開(kāi)始
    fmt.Println("s[:3] ==", s[:3])
    //省略的寫(xiě)法燕鸽, : 符號(hào)右邊省略兄世,表示到最后一個(gè)元素
    fmt.Println("s[4:] ==", s[4:])
}

重新切片的切面,注意省略的寫(xiě)法啊研。

s == [1 1 2 3 5 8 13 21 34 55]
s[1:4] == [1 2 3]
s[2:5] == [2 3 5]
s[:3] == [1 1 2]
s[4:] == [5 8 13 21 34 55]

可以看到御滩,此例中的多個(gè)slice都是針對(duì)同一個(gè)數(shù)組在操作。切片的切片的表達(dá)式是 s[lo:hi] 党远。
我們可以看到削解,hi 是不包含在新的slice內(nèi)的。
所以沟娱,s[lo:lo] 是空的氛驮,而 s[lo:lo + 1] 有一個(gè)元素。

使用 make 創(chuàng)建 slice 的時(shí)候济似,可以使用第三個(gè)參數(shù)矫废,指定容量。
容量用 cap() 表示砰蠢。
b := make([]int, 0, 5) //創(chuàng)建一個(gè)slice蓖扑,長(zhǎng)度為0,容量為5
b = b[:cap(b)] //b的長(zhǎng)度為5台舱,容量為5
b = b[1:] //b的長(zhǎng)度為4律杠,容量為4
用一個(gè)列子,看一下slice容量的變化竞惋。

package main

import (
    "fmt"
)

func main() {
    a := make([]int, 5)
    printSlice("a", a)

    b := make([]int, 0, 5)
    printSlice("b", b)

    c := b[:2]
    printSlice("c", c)

    d := c[2:5]
    printSlice("d", d)

}
func printSlice(s string, x []int)  {
    fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x)
}

運(yùn)行結(jié)果

a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]

新聲明的 slice 如果沒(méi)有賦值的話柜去,它的零值是 nil 。長(zhǎng)度和容量都是 0 碰声。
以下代碼可證

package main

import (
    "fmt"
)

func main() {
    var z []int
    fmt.Println(z, len(z), cap(z))
    if z == nil {
        fmt.Println("nil !")
    }
}

運(yùn)行結(jié)果

[] 0 0
nil !
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诡蜓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胰挑,更是在濱河造成了極大的恐慌蔓罚,老刑警劉巖椿肩,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異豺谈,居然都是意外死亡郑象,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)茬末,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厂榛,“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了铭乾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鉴吹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任痰驱,我火速辦了婚禮,結(jié)果婚禮上瞳浦,老公的妹妹穿的比我還像新娘担映。我一直安慰自己,他們只是感情好叫潦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蝇完。 她就那樣靜靜地躺著,像睡著了一般诅挑。 火紅的嫁衣襯著肌膚如雪四敞。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天拔妥,我揣著相機(jī)與錄音忿危,去河邊找鬼。 笑死没龙,一個(gè)胖子當(dāng)著我的面吹牛铺厨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硬纤,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼解滓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了筝家?” 一聲冷哼從身側(cè)響起洼裤,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎溪王,沒(méi)想到半個(gè)月后腮鞍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體值骇,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年移国,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吱瘩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迹缀,死狀恐怖使碾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祝懂,我是刑警寧澤票摇,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站嫂易,受9級(jí)特大地震影響兄朋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怜械,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傅事。 院中可真熱鬧缕允,春花似錦、人聲如沸蹭越。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)响鹃。三九已至驾霜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間买置,已是汗流浹背粪糙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忿项,地道東北人蓉冈。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轩触,于是被迫代替她去往敵國(guó)和親寞酿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Go 語(yǔ)言中,slice表示一個(gè)擁有相同類型元素的可變長(zhǎng)度序列榨为。slice通常被寫(xiě)為[]T惨好,其中元素的類型都是T煌茴;...
    副班長(zhǎng)國(guó)偉閱讀 1,556評(píng)論 0 1
  • 語(yǔ)言介紹 Go(又稱Golang)是Google開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型昧狮、并發(fā)型景馁,并具有垃圾回收功能的編程語(yǔ)言...
    hewolf閱讀 1,253評(píng)論 0 0
  • 切片(slice)是 Golang 中一種比較特殊的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)更便于使用和管理數(shù)據(jù)集合逗鸣。切片是圍繞動(dòng)態(tài)...
    小孩真笨閱讀 1,073評(píng)論 0 1
  • Slice常見(jiàn)操作及底層原理實(shí)現(xiàn) 一 什么是Slice slice(切片)是一種數(shù)組結(jié)構(gòu)合住,相當(dāng)于是一個(gè)動(dòng)態(tài)的數(shù)組,...
    假程序員的世界閱讀 5,266評(píng)論 0 4
  • 1. 單行文本省略問(wèn)題 大致是有一個(gè) main 容器是 flex 布局撒璧,左邊一個(gè) logo 固定寬高透葛,右邊 con...
    點(diǎn)_ba7a閱讀 293評(píng)論 0 0