如何解决如何将twoD数组分配给slice的切片?
在以下代码中:
package main
import "fmt"
func main() {
fmt.Println("Simple array")
arrayInt := []int{1,2,3,4}
fmt.Println(arrayInt,"\n")
fmt.Println("Simple slice")
sliceInt := arrayInt[:]
fmt.Println(sliceInt,"\n")
fmt.Println("Array of arrays")
twoDimArray := [3][4]int{
{1,1,1},{2,2},{3,3},}
fmt.Println(twoDimArray,"\n")
fmt.Println("Array of slices")
var arrayOfSlice [3][]int
for i,_ := range twoDimArray {
arrayOfSlice[i] = twoDimArray[i][:]
}
fmt.Println(arrayOfSlice,"\n")
fmt.Println("Slice of arrays")
var sliceOfArrays [][4]int
sliceOfArrays = twoDimArray[:]
fmt.Println(sliceOfArrays,"\n")
fmt.Println("Slice of slices")
var sliceOfSlice [][]int
}
twoDimArray
需要分配给sliceOfSlice
,而无需为sliceOfSlice
创建基础数组(实际数据)
如何将twoDimArray
分配给sliceOfSlice
?
解决方法
twoDimArray
的元素类型为[4]int
,而sliceOfSlice
的元素类型为[]int
。这些类型不同,因此不能有sliceOfSlice
与twoDimArray
共享后备数组的值。 twoDimArray
需要一个新的后备数组,但是其元素可以是切片值,这些切片值与twoDimArray
的元素共享后备数组,或更具体地说,具有的{{ 1}}作为其支持数组。
您必须使用循环对外部数组的每个数组元素进行切片,没有速记:
twoDimArray
这将输出(在Go Playground上尝试):
fmt.Println("Slice of slices")
var sliceOfSlice [][]int
sliceOfSlice = make([][]int,len(twoDimArray))
for i := range twoDimArray {
sliceOfSlice[i] = twoDimArray[i][:]
}
fmt.Println(sliceOfSlice,"\n")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。