我来自C++背景,习惯使用std::vector
类处理这种情况。
假设我想要一个动态数组:
type a struct {
b int
c string
}
如何标准地完成这个任务?
提供代码片段会非常有用
我来自C++背景,习惯使用std::vector
类处理这种情况。
假设我想要一个动态数组:
type a struct {
b int
c string
}
如何标准地完成这个任务?
提供代码片段会非常有用
append()
。type mytype struct {
a, b int
}
func main() {
a := []mytype{mytype{1, 2}, mytype{3, 4}}
a = append(a, mytype{5, 6})
}
请参考规范获取有关append的更多信息。
s := make([]int, 0, 10)
变量s是一个长度为0、容量为10的int类型切片。内置的len()和cap()函数可以让你获取切片的长度和容量:
len(s) == 0
cap(s) == 10
s = s[0:5]
// len(s) == 5
// cap(s) == 10
s = s[0:1]
// len(s) == 1
a := make([]int, 10)
// len(a) == cap(a) == 10
b := make([]int)
// len(b) == cap(b) == 0
这些都很好,但是如果您需要将切片的长度增加到超过其容量怎么办?为此,您需要分配一个新的切片并将旧切片的内容复制到新切片中。(内置函数“copy”也可以使用。)
t := make([]int, len(s), 20)
copy(t, s)
Effective Go文档进一步介绍了这个例子,实现了一个Append函数,将一个切片附加到另一个切片中,如果需要的话会调整大小。t := make([]int, 5, 10) u := make([]int, 10, 20)
等等。 - Xeoncrossappend()
函数会进行重新分配。请参见 cthom06 和 Jessta 的回答。 - minghua这个惯用的方法已经改变了。 由于内置的append()函数的添加,您可以像这样扩展一个切片:
type a struct {
b int
c string
}
func main(){
var mySlice []a
mySlice = append(mySlice,a{5,"pizza"})
}
如果切片有足够的空间,append()会将给定的项目附加到切片,否则它会扩展该切片。
有关append()的更多信息,请访问此处http://golang.org/doc/go_spec.html#Appending_and_copying_slices
一个更简单的 append()
内建函数示例
friends := []string{"Adam"}
friends = append(friends, "Rahul") // Add one friend or one string
friends = append(friends, "Angelica", "Rashi") // Add multiple friends or multiple strings
type mytype struct {
a, b int
}
func main() {
sl := make([]mytype, 10, 50) //slice of 10 items, max capacity 50 these do not have to be constant expressions.
sl[0] = mytype{1,2}
//...
for i, value := range sl {
// ... do stuff with value
}
}
嗨,我们可以用两种简单的方法来做到这一点
type mytype struct {
a, b int
}
就像这样做
__
a := []mytype{mytype{1, 2}, mytype{3, 4}, mytype{4, 5}}
__
a:= append([]mytype{}, mytype{1, 2}, mytype{3, 4}, mytype{4, 5})
添加任意数量的内容。第一个方法是实现这一功能的简单方式。希望这能对您有所帮助。