第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang 如何使用 make 創(chuàng)建地圖到指針到切片

Golang 如何使用 make 創(chuàng)建地圖到指針到切片

Go
鴻蒙傳說 2022-09-05 17:43:21
我想創(chuàng)建一個(gè)動(dòng)態(tài)初始化的位圖數(shù)據(jù)結(jié)構(gòu)。我正在嘗試使用golang地圖:type Register map[bool]*[]bool我初始化映射的方式是:register := make(Register) register[true] := make(*[]bool, len(arr))  // arr is the array for which i want to create the bitmap這顯然會(huì)產(chǎn)生錯(cuò)誤編譯問題:error: cannot make type *[]bool我也嘗試過使用指針語法:register[true] = &(make([]bool, len(arr)))這給了我一個(gè)錯(cuò)誤:cannot take the address of make([]bool, len(arr))我希望映射值的原因是,寫回映射的過程保持理智和就地。*[]bool雖然go不會(huì)抱怨,因此它是一種有效的類型。如果它有效,那么以我想要的方式使用它的idomatic方式是什么。如果不是,那么替代方法是什么?map[bool]*[]bool
查看完整描述

2 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

使用以下代碼創(chuàng)建指向切片的指針:


register := make(Register)

s := make([]bool, len(arr)) // create addressable slice value s.

register[true] = &s

您可以使用 來消除變量聲明,但此方法不會(huì)減少代碼行數(shù),而是添加另一個(gè)映射索引操作。new


register := make(Register)

register[true] = new([]bool)

*register[true] = make([]bool, len(arr))

聲明一個(gè)函數(shù)以將賦值移動(dòng)到一行:


func makeSlice(n int) *[]bool {

    s := make([]bool, len(arr))

    return &s

}


...


register := Register{true: makeSlice(len(arr))}

由于映射鍵有兩個(gè)可能的值(true 和 false),因此可以使用結(jié)構(gòu)而不是映射來簡(jiǎn)化代碼:


type Register struct {

    t, f []bool

}


register := Register{t: make([]bool, len(arr))}

中的結(jié)構(gòu)字段是可尋址的,因此您可以使用 來獲取 .register&register.t*[]bool


此主題的變體是使用數(shù)組:


type Register [2][]bool

register := Register{1: make([]bool, len(arr))}

如果僅修改切片元素而不修改切片值,則無需使用指向切片的指針。


type Register map[bool][]bool

register := make(Register)

register[true] := make([]bool, len(arr))

如果確實(shí)修改了切片值,則 可能會(huì)更有效且更易于使用。修改切片值時(shí),應(yīng)用程序需要賦回地圖,但要消除間接尋址。map[bool][]bool


查看完整回答
反對(duì) 回復(fù) 2022-09-05
?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

另一個(gè)選項(xiàng)是使用函數(shù):new


package main

import "fmt"


func main() {

   type Register map[bool]*[]bool

   register := make(Register)

   register[true] = new([]bool)

   // main.Register{true:(*[]bool)(0xc000004078)}

   fmt.Printf("%#v\n", register)

}

https://golang.org/pkg/builtin#new


查看完整回答
反對(duì) 回復(fù) 2022-09-05
  • 2 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)