gpt4 book ai didi

go - 在 Go 中,如何复制 slice 的最后一个元素?

转载 作者:IT王子 更新时间:2023-10-29 01:54:18 26 4
gpt4 key购买 nike

如果我有一个 Python 列表,复制最后一个元素很简单:l.append(l[-1])。有没有一种优雅的方法可以使用 Go slice 来做到这一点?

我目前最好的是data = append(data, data[len(data) - 1])

最佳答案

这才是正确的做法。

在 Go 中你不能使用负索引,所以最后一个元素的索引是 len(data) -1

在 Go 中 append()是一个内置函数而不是 slice 的方法,它返回一个新的 slice 值,如果您需要扩展 slice ,您必须分配或存储该值,因此通常您无法在代码中缩短任何内容。

请注意,如果您要创建自己的类型,则可以将方法 append 到它,这可以简化事情。例如:

type ints []int

func (i *ints) append(es ...int) {
*i = append(*i, es...)
}

func (i *ints) appendLast() {
*i = append(*i, (*i)[len(*i)-1])
}

使用它:

is := ints{1, 2, 3}
fmt.Println(is)

is.append(4, 5) // Append some elements
fmt.Println(is)

is.append(is[len(is)-1]) // Append last element explicitly
fmt.Println(is)

is.appendLast() // Append last element using appendLast method
fmt.Println(is)

// You can also use it for []int values, with conversion:
is2 := []int{1, 2, 3}
(*ints)(&is2).appendLast()
fmt.Println(is2)

输出(在 Go Playground 上尝试):

[1 2 3]
[1 2 3 4 5]
[1 2 3 4 5 5]
[1 2 3 4 5 5 5]
[1 2 3 3]

您还可以在不创建新类型的情况下使用简单的 util 函数:

func appendLast(i []int) []int {
return append(i, i[len(i)-1])
}

func appendLast2(i *[]int) {
*i = append(*i, (*i)[len(*i)-1])
}

func main() {
is := []int{1, 2, 3}
fmt.Println(is)

is = appendLast(is)
fmt.Println(is)

appendLast2(&is)
fmt.Println(is)
}

输出(在 Go Playground 上尝试):

[1 2 3]
[1 2 3 3]
[1 2 3 3 3]

关于go - 在 Go 中,如何复制 slice 的最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46363586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com