为了账号安全,请及时绑定邮箱和手机立即绑定

将切片转换为元组的便捷功能?

将切片转换为元组的便捷功能?

Go
森林海 2021-06-04 07:47:59
在 Python 中,可以编写这样的代码,从列表中分配多个值:(a, b, c, d) = [1,2,3,4]是否有一组类似的用于切片的 Go 库函数?也就是说,我可以这样做:http : //play.golang.org/p/DY1Bi5omm1package mainfunc get3(s []interface{}) (    a interface{},    b interface{},    c interface{},    rest []interface{}) {  return s[0],s[1],s[2],s[4:]}func main() {    s := make([]interface{},5);  for i :=0 ; i < 5; i++ { s[i] = i}  a,b,c,_ := get3(s)  print(a.(int))  print(b.(int))  print(c.(int))}有没有标准的 gophery 方法来做到这一点?有没有办法解决界面丑陋的问题?{}
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

我认为你不能,至少不能以惯用/干净的方式。您可以进行多项分配,但您必须直接或使用闭包传递单个值:


package main


import (

  "fmt"

)


func valuesFromList(list[]int,startFrom int) func() int  {

  i:=startFrom

  return func() int {

    ret := list[i]

    i++

    return ret

  }

}



func main () {

  list := []int{0,1,2,3,4,5,6,7,8,9}

  yield := valuesFromList(list,5)


  //This works

  a,b,c := yield(),yield(),yield()

  fmt.Println(a)

  fmt.Println(b)

  fmt.Println(c)


  //This also works

  d,e,f := list[0],list[1],list[2]

  fmt.Println(d)

  fmt.Println(e)

  fmt.Println(f)

  //This won't work

  //g,h,i:= list[7:9]

}


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信