第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Go 切片中,為什么 s[lo:hi] 在元素 hi-1 處結(jié)束?

在 Go 切片中,為什么 s[lo:hi] 在元素 hi-1 處結(jié)束?

Go
湖上湖 2021-08-30 14:40:09
根據(jù)Go之旅,在 Go 切片中s,表達(dá)式s[lo:hi]計(jì)算為從lo到的元素的切片hi-1,包括:package mainimport "fmt"func main() {    p := []int{0,  // slice position 0                10, // slice position 1               20, // slice position 2               30, // slice position 3               40, // slice position 4               50} // slice position 5    fmt.Println(p[0:3]) // => [0 10 20]}    在我上面的代碼示例中,“p[0:3]”似乎直觀地“讀”為:“從位置 0 到位置 3 的切片”,相當(dāng)于 [0, 10, 20, 30]。但當(dāng)然,它實(shí)際上等同于 [0 10 20]。所以我的問題是:上限值評(píng)估為hi-1而不是簡(jiǎn)單的設(shè)計(jì)原理是什么hi?感覺不直觀,但一定有某種原因讓我失蹤,我很好奇那可能是什么。
查看完整描述

2 回答

?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

這完全是一個(gè)約定問題,當(dāng)然還有其他方法可以做到(例如,Matlab 使用第一個(gè)索引為 1 的數(shù)組)。選擇實(shí)際上取決于您想要什么屬性。事實(shí)證明,使用 0 索引數(shù)組,其中切片是包含不包含的(即,從 a 到 b 的切片包含元素 a 并排除元素 b)具有一些非常好的屬性,因此這是一個(gè)非常常見的選擇。這里有一些優(yōu)點(diǎn)。


0 索引數(shù)組和包含-排除切片的優(yōu)點(diǎn)


(請(qǐng)注意,我使用的是非 Go 術(shù)語,所以我將以 C 或 Java 談?wù)撍鼈兊姆绞秸務(wù)摂?shù)組。數(shù)組就是 Go 所說的切片,而切片是子數(shù)組(即“切片從索引 1 到索引 4"))


指針?biāo)阈g(shù)有效。如果您使用像 C 這樣的語言,數(shù)組實(shí)際上只是指向數(shù)組中第一個(gè)元素的指針。因此,如果您使用 0 索引數(shù)組,那么您可以說索引i處的元素只是數(shù)組指針加i 所指向的元素。例如,如果我們有一個(gè)數(shù)組[3 2 1],數(shù)組的地址為10(假設(shè)每個(gè)值占用一個(gè)字節(jié)的內(nèi)存),那么第一個(gè)元素的地址為10 + 0 = 10,則第二個(gè)的地址是 10 + 1 = 11,依此類推。簡(jiǎn)而言之,它使數(shù)學(xué)變得簡(jiǎn)單。

切片的長(zhǎng)度也是切片的地方。也就是說,對(duì)于一個(gè)數(shù)組arr,arr[0:len(arr)]就是它arr本身。這在實(shí)踐中非常有用。例如,如果我調(diào)用n, _ := r.Read(arr)(其中n是讀入的字節(jié)數(shù)arr),那么我可以只arr[:n]獲取與arr實(shí)際寫入的數(shù)據(jù)對(duì)應(yīng)的切片arr。

指數(shù)不重疊。這意味著如果我有arr[0:i], arr[i:j], arr[j:k], arr[k:len(arr)],這些切片完全覆蓋arr自身。您可能不會(huì)經(jīng)常發(fā)現(xiàn)自己將數(shù)組劃分為這樣的子切片,但它具有許多相關(guān)的優(yōu)點(diǎn)。例如,考慮以下代碼以基于非連續(xù)整數(shù)拆分?jǐn)?shù)組:


func consecutiveSlices(ints []int) [][]int {

    ret := make([][]int, 0)

    i, j := 0, 1

    for j < len(ints) {

        if ints[j] != ints[j-1] + 1 {

            ret = append(ret, ints[i:j])

            i = j

        }

    }

    ret = append(ret, ints[i:j])

}

(這段代碼顯然不能很好地處理一些邊緣情況,但你明白了)


如果我們嘗試使用 inclusive-inclusive 切片來編寫等效的函數(shù),它會(huì)復(fù)雜得多。


如果有人能想到更多,請(qǐng)隨時(shí)編輯此答案并添加它們。


查看完整回答
反對(duì) 回復(fù) 2021-08-30
?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

Go 編程語言規(guī)范

切片類型

切片表達(dá)式

對(duì)于字符串、數(shù)組、指向數(shù)組的指針或切片 a,主要表達(dá)式

a[low : high]

構(gòu)造一個(gè)子串或切片。索引 low 和 high 選擇操作數(shù) a 的哪些元素出現(xiàn)在結(jié)果中。結(jié)果的索引從 開始,0長(zhǎng)度等于high - low。

為方便起見,可以省略任何索引。缺失的低指數(shù)默認(rèn)為零;缺少的高索引默認(rèn)為切片操作數(shù)的長(zhǎng)度

對(duì)于數(shù)組或字符串,如果 0 <= low <= high <= len(a),則索引在范圍內(nèi),否則它們超出范圍。對(duì)于切片,索引上限是切片容量 cap(a) 而不是長(zhǎng)度。常量索引必須是非負(fù)的并且可以用 int 類型的值表示;對(duì)于數(shù)組或常量字符串,常量索引也必須在范圍內(nèi)。如果兩個(gè)指數(shù)都是常數(shù),則它們必須滿足 low <= high。如果索引在運(yùn)行時(shí)超出范圍,則會(huì)發(fā)生運(yùn)行時(shí)恐慌。

對(duì)于q := p[m:n],qp從 index 開始m的一段n-m元素長(zhǎng)度的切片。


查看完整回答
反對(duì) 回復(fù) 2021-08-30
  • 2 回答
  • 0 關(guān)注
  • 225 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)