arrays - Go 在数组子切片上的内置范围具有不一致的行为
问题描述
为什么我们不能使用 builtrange
来指示给定数组索引的下限,但我们可以指定索引的上限?
给定一片 int:
array := []int{4, 76, -29, 3, 9, 223, 0, -3, -44, 76, 3, 98, 62, 144}
我想在切片上进行范围,不包括前两个元素。
我可以用for循环来做到这一点:
for i := 2; i < len(array); i++ {
fmt.Printf("%d ", array[i])
}
但不能使用内置range
:
for i := range array[2:] {
fmt.Printf("%d ", array[i])
}
奇怪的是,我可以排除上限的元素,如下所示:
for i := range array[:5] {
fmt.Printf("%d ", array[i])
}
为什么是这样?
解决方案
它确实有效,您只是在查看错误的切片。
表达式array[2:]
是一个新切片,从array
. 该切片的第 0 个元素是原始切片的第 2 个元素。这样做,你会看到:
for i,value := range array[2:] {
fmt.Printf("%d ", value)
}
i
范围从 0 到 len(array)-2的值。
推荐阅读
- jdbc - phoenix 查询服务器客户端太多 close_wait
- spring - Beans 可以在一个应用程序 IOC 之间共享到另一个应用程序 IOC 在 JVM 中运行吗?
- ios - 当应用程序为背景时如何添加图像
- python - pygame.sprite.Group.draw 不绘制图像
- java - 如何为打包安装程序(使用 Jpackage 创建)安装的 java 应用程序设置自定义安装目录?
- spring-boot - Spring REST:在 RestTemplate 与 RequestEntity 中指定 http 方法和 url
- azure - 基于读取 Odata 的 Azure 警报
- android - 为回收站视图的项目视图设置可访问性操作
- google-cloud-platform - GCP 警报过滤器不影响公开事件
- pygame - 如何返回类中立方体的位置值?