gpt4 book ai didi

go - GoLang Slice默认在上下限之间混淆

转载 作者:行者123 更新时间:2023-12-01 22:38:29 25 4
gpt4 key购买 nike

package main
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}

s=s[0:4]
fmt.Println(s) // 1st

s = s[1:4]
fmt.Println(s) // 2nd

s = s[:2]
fmt.Println(s) //3rd

s = s[1:]
fmt.Println(s) // 4th

s= s[:]
fmt.Println(s) // 5th

s=s[0:4]
fmt.Println(s) // 6th
}

我得到的输出是这个
[2 3 5 7]
[3 5 7]
[3 5]
[5]
[5]
[5 7 11 13]


为什么在第三名
只有3 5为什么不是2 3

假设我要通过这种逻辑
每次 slice 时,则减小:
为什么最后一行有5 7 11 13。

如果假设上述逻辑是错误的,那么
:为什么最后一行输出[5 7 11 13]为什么不以2开头

Here is the link from where I am going thru

最佳答案

slice 指的是基础数组。对切​​片进行重新 slice 不会对基础数组产生影响。

slice表达式中的偏移量(即[0:4]中的0)是指slice的开始,而不是数组的开始。因此,切出数组后,您将无法“返回”到数组的早期值。为此,您必须保持较早的 slice 值。

这是可以通过 slice (用花括号表示)“看到”基础数组的一部分(用方括号表示)的过程:

initial:  [{2,  3,  5 , 7,  11, 13}]
s=s[0:4]: [{2, 3, 5 , 7}, 11, 13 ]
s=s[1:4]: [ 2, {3, 5 , 7}, 11, 13 ]
s=s[:2]: [ 2, {3, 5}, 7, 11, 13 ]
s=s[1:]: [ 2, 3, {5}, 7, 11, 13 ]
s=s[:]: [ 2, 3, {5}, 7, 11, 13 ] // no-op
s=s[0:4]: [ 2, 3, {5 , 7, 11, 13}]

注意数组如何保持不变,左花括号仅向右移动(如果有的话)。

有关更多详细信息,请参见 "Go Slices: usage and internals"

关于go - GoLang Slice默认在上下限之间混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58952868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com