【问题标题】:What is the idiomatic way in go to write (by index) to an out of index element in a slice?go to write (by index) to a out of index element in slice 的惯用方式是什么?
【发布时间】:2019-06-28 07:54:27
【问题描述】:

假设我有一个人口稀少的切片,并希望通过索引读取/写入一个元素,该索引可能超出切片容量,也可能不超出。

当 x 可能超出容量时,写入 s[x] 的惯用方式是什么?

【问题讨论】:

  • 由于各种原因,map[int] 可能比人口稀少的切片更好。
  • Go 中没有稀疏切片(或数组)。你必须重新设计。

标签: go slice allocation indexoutofrangeexception


【解决方案1】:

您需要检查x 是否在切片范围之外,如果超出则扩展切片(附加零或类似的东西)。没有神奇的捷径。要“扩展”切片,您可以这样做:

a = append(a, make([]T, j)...)

a 是切片,T 是其内容的类型,j 是您想要扩展它的程度。

【讨论】:

  • 我可能会制作新切片并将旧切片复制到其中。它同样具有可读性,虽然编译器可能认识到不需要append 中的make,但我不会指望它。
  • @JimB:很公平。作为记录,我从 github.com/golang/go/wiki/SliceTricks#extend 获取了这个 sn-p
  • 是的,IMO 中的一些“技巧”在制作在线内容时过于努力了。这不是错误的,可能对小切片没有影响,但值得注意。
猜你喜欢
  • 2018-12-10
  • 2016-11-04
  • 2021-02-28
  • 2013-04-27
  • 1970-01-01
  • 2015-02-11
  • 2022-09-23
  • 2023-02-21
  • 2023-01-13
相关资源
最近更新 更多