亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法在 golang 中映射對象數組?

有沒有辦法在 golang 中映射對象數組?

Go
慕桂英3389331 2022-11-23 20:13:44
來自 Nodejs,我可以做類似的事情:// given an array `list` of objects with a field `fruit`:fruits = list.map(el => el.fruit) # which will return an array of fruit strings 有什么辦法可以在 golang 的優雅單襯里做到這一點?我知道我可以用一個范圍循環來做到這一點,但我正在尋找一個線性解決方案的可能性
查看完整描述

1 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

在 Go 中,數組是不靈活的(因為它們的長度是用它們的類型編碼的)并且傳遞給函數的成本很高(因為函數對其數組參數的副本進行操作)。我假設您想對切片而不是數組進行操作。


因為方法不能接受額外的類型參數,所以你不能簡單地在 Go 中聲明一個泛型Map 方法。但是,您可以定義Map為通用頂級函數:


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))

打印到標準輸出(在這個 Playground[5 3 5]中嘗試)。

Go 1.18 看到添加了一個golang.org/x/exp/slicespackage,它提供了許多對切片的方便操作,但是其中Map明顯缺少一個功能。該功能的遺漏是在專門針對該提案的GitHub 問題中進行了長時間討論的結果;golang.org/x/exp/slices關切包括以下方面:

Russ Cox最終選擇Map退出該提案,因為它

作為其他地方更全面的流 API 的一部分可能更好。


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號