4 回答

TA貢獻1811條經驗 獲得超6個贊
使用切片復合文字:?[]int{1}
,例如:
package main
import (
? ? "fmt"
)
func main() {
? ? var x []int
? ? for i := 2; i < 10; i += 2 {
? ? ? ? x = append(x, i)
? ? }
? ? fmt.Println(x)
? ? x = append([]int{1}, x...)
? ? fmt.Println(x)
}
游樂場:https://play.golang.org/p/Yc87gO7gJlD
輸出:
[2?4?6?8] [1?2?4?6?8]
然而,這個更高效的版本可能會進行更少的分配,只有在沒有空閑切片容量時才需要分配。
package main
import (
? ? "fmt"
)
func main() {
? ? var x []int
? ? for i := 2; i < 10; i += 2 {
? ? ? ? x = append(x, i)
? ? }
? ? fmt.Println(x)
? ? x = append(x, 0)
? ? copy(x[1:], x)
? ? x[0] = 1
? ? fmt.Println(x)
}
游樂場: https: //play.golang.org/p/fswXul_YfvD
輸出:
[2 4 6 8]
[1 2 4 6 8]
好的代碼必須是可讀的。在 Go 中,我們經常將實現(xiàn)細節(jié)隱藏在函數中。Go 編譯器正在優(yōu)化編譯器,prependInt內聯(lián)小而簡單的函數(如 )。
package main
import (
? ? "fmt"
)
func prependInt(x []int, y int) []int {
? ? x = append(x, 0)
? ? copy(x[1:], x)
? ? x[0] = y
? ? return x
}
func main() {
? ? var x []int
? ? for i := 2; i < 10; i += 2 {
? ? ? ? x = append(x, i)
? ? }
? ? fmt.Println(len(x), cap(x), x)
? ? x = prependInt(x, 1)
? ? fmt.Println(len(x), cap(x), x)
}
游樂場: https: //play.golang.org/p/wl6gvoXraKH
輸出:
4 4 [2 4 6 8]
5 8 [1 2 4 6 8]

TA貢獻1853條經驗 獲得超18個贊
當前版本是go1.14.11
沒有 for 循環(huán)的前置:
package main
import "fmt"
func main () {
data := []int{1, 2, 3, 4}
fmt.Println(data)
data = append([]int{99}, data...)
fmt.Println(data)
}
示例形式:https://codingair.wordpress.com/2014/07/18/go-appendprepend-item-into-slice/
使用整數:https://play.golang.org/p/gaLhB5_d1Iu

TA貢獻2003條經驗 獲得超2個贊
我知道這個問題只是為了int但我想我會把這個添加到討論中:
https://play.golang.com/p/PNax2a1rL3q
import (
? ? "golang.org/x/exp/constraints"
)
type Number interface {
? ? constraints.Signed | constraints.Unsigned | constraints.Float
}
func prepend[T Number](list []T, elems ...T) []T {
? ? results := make([]T, len(list)+len(elems))
? ? results = append(results, 0)
? ? copy(results[len(elems):], list)
? ? copy(results[:len(elems)], elems)
? ? return results
}

TA貢獻1818條經驗 獲得超3個贊
另一個答案使用appendand ,但您可以在一兩行中copy僅使用 , 來完成:append
package main
import "fmt"
func main() {
{
a := []int{20, 30}
a = append(append(a, 10), a...)[len(a):]
fmt.Println(a)
}
{
a := []int{20, 30}
a = append(make([]int, 1), a...)
a[0] = 10
fmt.Println(a)
}
{ // if starting with empty slice, use: a := make([]int, 0, 1)
a := []int{20, 30}
a = append(a[:1], a...)
a[0] = 10
fmt.Println(a)
}
}
或者作為另一種選擇,您可以使用鏈表:
package main
import (
"container/list"
"fmt"
)
func main() {
a := list.New()
a.PushBack(20)
a.PushBack(30)
a.PushFront(10)
for n := a.Front(); n != nil; n = n.Next() {
fmt.Println(n.Value)
}
}
https://golang.org/pkg/container/list
- 4 回答
- 0 關注
- 191 瀏覽
添加回答
舉報