1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
在 Go 中,數(shù)組是不靈活的(因?yàn)樗鼈兊拈L度是用它們的類型編碼的)并且傳遞給函數(shù)的成本很高(因?yàn)楹瘮?shù)對(duì)其數(shù)組參數(shù)的副本進(jìn)行操作)。我假設(shè)您想對(duì)切片而不是數(shù)組進(jìn)行操作。
因?yàn)榉椒ú荒芙邮茴~外的類型參數(shù),所以你不能簡(jiǎn)單地在 Go 中聲明一個(gè)泛型Map 方法。但是,您可以定義Map為通用頂級(jí)函數(shù):
func Map[T, U any](ts []T, f func(T) U) []U {
us := make([]U, len(ts))
for i := range ts {
us[i] = f(ts[i])
}
return us
}
然后你可以寫下面的代碼,
names := []string{"Alice", "Bob", "Carol"}
fmt.Println(Map(names, utf8.RuneCountInString))
打印到標(biāo)準(zhǔn)輸出(在這個(gè) Playground[5 3 5]中嘗試)。
Go 1.18 看到添加了一個(gè)golang.org/x/exp/slices
package,它提供了許多對(duì)切片的方便操作,但是其中Map
明顯缺少一個(gè)功能。該功能的遺漏是在專門針對(duì)該提案的GitHub 問題中進(jìn)行了長時(shí)間討論的結(jié)果;golang.org/x/exp/slices
關(guān)切包括以下方面:
Russ Cox最終選擇Map
退出該提案,因?yàn)樗?/p>
作為其他地方更全面的流 API 的一部分可能更好。
- 1 回答
- 0 關(guān)注
- 117 瀏覽
添加回答
舉報(bào)