課程
/后端開發(fā)
/Go
/Go語言第一課
length = 7是為什么啊
2018-03-21
源自:Go語言第一課 5-3
正在回答
```
package main
import "fmt"
func main() {
? ? var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
? ??
? ? // 切片下標(biāo)4~6 容量上界到8?
? ? // slice5 = [5 6] * *,? 實(shí)際長度為2? 容量為4
? ? // 后面兩個*代表上界最多擴(kuò)容到下標(biāo)8 [5,6,7,8]
? ? slice5 := numbers4[4:6:8]? ? ??
? ? length := (2)? ? ? ? ? ? ? ? ? ?
capacity := (4)? ? ? ? ? ? ? ? ?
fmt.Printf("%v, %v\n", length == len(slice5), capacity == cap(slice5))
// s1[:cap(s1)] 代表將其擴(kuò)容到最大值
? ? // 對其進(jìn)行擴(kuò)容 slice5[:4] 擴(kuò)容到長度為4
? ? // 在切片后方追加元素 [5,6,7,8,11,12,13]
? ? // 4+3? 長度為7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
slice5 = slice5[:cap(slice5)]? ? ? ? ? ? ? ? ?
slice5 = append(slice5, 11, 12, 13)? ? ? ? ?
length = (7)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
fmt.Printf("%v\n", length == len(slice5))
// copy 參數(shù)2的元素 覆蓋掉參數(shù)1值中的相應(yīng)位置 (索引值)
// [5,6,7,8,11,12,13] <-[0,0,0]
// [0,0,0,8,11,12,13]?
? ? //? 0 1 2 3 4? ? ??
slice6 := []int{0, 0, 0}? ? ? ? ? ? ? ? ? ??
copy(slice5, slice6)? ? ? ? ? ? ? ? ? ? ? ??
e2 := (0)
e3 := (8)
e4 := (11)
fmt.Printf("%v, %v, %v\n", e2 == slice5[2], e3 == slice5[3], e4 == slice5[4])
}
slice5?:= numbers4[4:6:8]
slice5 = int[]{5,6}
slice5 = slice5[:cap(slice5)]
slice5 = int[]{5,6,7,8,9}
slice5 = append(slice5, 11, 12, 13)
slice5 =?int[]{5,6,7,8,9,11,12,13}
所有 len(slice5)=7
要想知道他為什么是7 那就要看上一段代碼中cap(slice5) 它的容量是多少,slice5 := numbers4[4:6:8]?這里有第三個數(shù)值8 就是這個切片的容量上邊界,也就限制了它本身底層數(shù)組的長度從原來的10變成了8,容量的求值是數(shù)組長度減去下邊界的絕對值,所以是8-4=4,后面的語句append對slice5進(jìn)行了擴(kuò)容,加了三個數(shù)11,12,13,所以len(slice5) = 7
你可以對照著題目看一下過程
len(slice5)=2
cap(slice5)=4
len(slice5)=4
len(slice5)=7
so,length=7
不是8嗎
舉報
Go語言入門教程,編程之必備知識擴(kuò)散,打好Go語言編程基礎(chǔ)
2 回答chan的長度如何解釋
4 回答請問,Go的數(shù)組類型,長度只能在初始化聲明好么?不能后續(xù)追加數(shù)組元素么?
1 回答精度6位小數(shù)是怎么確定的
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2019-02-23
```
package main
import "fmt"
func main() {
? ? var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
? ??
? ? // 切片下標(biāo)4~6 容量上界到8?
? ? // slice5 = [5 6] * *,? 實(shí)際長度為2? 容量為4
? ? // 后面兩個*代表上界最多擴(kuò)容到下標(biāo)8 [5,6,7,8]
? ? slice5 := numbers4[4:6:8]? ? ??
? ? length := (2)? ? ? ? ? ? ? ? ? ?
capacity := (4)? ? ? ? ? ? ? ? ?
fmt.Printf("%v, %v\n", length == len(slice5), capacity == cap(slice5))
// s1[:cap(s1)] 代表將其擴(kuò)容到最大值
? ? // 對其進(jìn)行擴(kuò)容 slice5[:4] 擴(kuò)容到長度為4
? ? // 在切片后方追加元素 [5,6,7,8,11,12,13]
? ? // 4+3? 長度為7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
slice5 = slice5[:cap(slice5)]? ? ? ? ? ? ? ? ?
slice5 = append(slice5, 11, 12, 13)? ? ? ? ?
length = (7)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
fmt.Printf("%v\n", length == len(slice5))
// copy 參數(shù)2的元素 覆蓋掉參數(shù)1值中的相應(yīng)位置 (索引值)
// [5,6,7,8,11,12,13] <-[0,0,0]
// [0,0,0,8,11,12,13]?
? ? //? 0 1 2 3 4? ? ??
slice6 := []int{0, 0, 0}? ? ? ? ? ? ? ? ? ??
copy(slice5, slice6)? ? ? ? ? ? ? ? ? ? ? ??
e2 := (0)
e3 := (8)
e4 := (11)
fmt.Printf("%v, %v, %v\n", e2 == slice5[2], e3 == slice5[3], e4 == slice5[4])
}
```
2018-08-14
slice5?:= numbers4[4:6:8]
slice5 = int[]{5,6}
slice5 = slice5[:cap(slice5)]
slice5 = int[]{5,6,7,8,9}
slice5 = append(slice5, 11, 12, 13)
slice5 =?int[]{5,6,7,8,9,11,12,13}
所有 len(slice5)=7
2018-06-28
要想知道他為什么是7 那就要看上一段代碼中cap(slice5) 它的容量是多少,slice5 := numbers4[4:6:8]?這里有第三個數(shù)值8 就是這個切片的容量上邊界,也就限制了它本身底層數(shù)組的長度從原來的10變成了8,容量的求值是數(shù)組長度減去下邊界的絕對值,所以是8-4=4,后面的語句append對slice5進(jìn)行了擴(kuò)容,加了三個數(shù)11,12,13,所以len(slice5) = 7
2018-04-16
你可以對照著題目看一下過程
len(slice5)=2
cap(slice5)=4
slice5 = slice5[:cap(slice5)]
len(slice5)=4
slice5 = append(slice5, 11, 12, 13)
len(slice5)=7
so,length=7
2018-03-21
不是8嗎