登录
首页 >  Golang >  Go问答

如何将切片转换为固定长度的切片并返回

来源:stackoverflow

时间:2024-04-30 11:51:29 482浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《如何将切片转换为固定长度的切片并返回》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

如何将 []int 转换为 [3]int?

这些都不起作用:

vec := []int{1, 2, 3}
    
    t1 := [3]int(vec)
    t2 := [3]int(vec[:])
    //cannot convert vec (variable of type []int) to [3]int
    
    t3 := [3]int{}
    copy(t3, vec)
    //invalid argument: copy expects slice arguments; found t3 (variable of type [3]int) and vec 
    //(value of type []int)

解决方案


这里有一个 Go playground example,可以更清楚地说明 copy(t3[:],vec) 发生了什么。

go 演示示例代码:

package main

import (
    "fmt"
)

func main() {
    slice := []int{1, 2, 3, 4}
    var array [3]int
    arrayAsSlice := array[:]      // arrayAsSlice storage IS array; they are aliased.
    copy(arrayAsSlice, slice[:3]) // copy into arrayAsSlice modifies array, too.
    arrayAsSlice[0] = -1          // slice and array are STILL aliased

    arrayAsSlice = append(arrayAsSlice, 99) // slice cannot grow in the memory it has, therefore, it is reallocated.
    arrayAsSlice[0] = 0                     // Now slice and array are NOT aliased, so this does not modify the array

    fmt.Printf("Hello, playground, %+v", array)
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>