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

如何在切片内设置结构的字段?

如何在切片内设置结构的字段?

Go
Smart猫小萌 2021-11-01 16:50:59
我声明了一个这样的类型type Klabel struct {    values []float64    label  string}然后,我像这样创建了一个这种类型的切片kdata := []Klabel如何设置标签变量或将一片浮点数附加到值?我试过kdata[0].label = "test"和kdata := make([]Klabel, 10)kdata[0].label = "test"和kdata = append(kdata[0], kdata[0].label = "test")好吧,没有成功......所以任何帮助表示赞赏!提前致谢!
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

你发了这个:


kdata := make([]Klabel, 10)


kdata[0].label = "test"

它有效。打印kdata切片时,输出为 ( Go Playground ):


[{[] test} {[] } {[] } {[] } {[] } {[] } {[] } {[] } {[] } {[] }]

输出显示kdata有 10 个元素,第一个元素具有标签值:"test"。


为了更清楚,打印:


fmt.Printf("%+v", kdata)

输出:


[{values:[] label:test} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:} {values:[] label:}]

切片(与地图不同)是可寻址的。您可以通过简单地索引切片并为字段分配新值来更改元素(即结构)的字段。


例如:


kdata[0].label = "test"

kdata[0].values = []float64{1.1, 2.2}

kdata[0].values = append(kdata[0].values, 3.3)


fmt.Printf("%+v", kdata[0])

输出:


{values:[1.1 2.2 3.3] label:test}

如果要将一片浮点数附加到values元素的字段:


vals := []float64{1.2, 2.3}


kdata[0].values = append(kdata[0].values, vals...) // Note the 3 dot ...


查看完整回答
反对 回复 2021-11-01
?
MYYA

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

作为另一个答案的替代方案,您也可以这样做:

kdata := []Klabel{{label: "test"}}

见 Go Playground

但请注意,切片长度将为 1 而不是 10,因此它并不完全等效。


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

添加回答

举报

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