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

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

從數(shù)組/切片中獲取元素索引或從 Go 中的映射獲取值的鍵?

從數(shù)組/切片中獲取元素索引或從 Go 中的映射獲取值的鍵?

Go
慕工程0101907 2021-11-01 10:58:38
我有一個(gè)枚舉的字符串列表(它們是常量,例如國家列表),我希望在提供枚舉的 int 值時(shí)能夠獲取字符串,反之亦然能夠獲取枚舉的 int 值提供字符串時(shí)。這是為了在數(shù)據(jù)庫事務(wù)的兩者之間進(jìn)行轉(zhuǎn)換。var MyData = [...]string {  "string1", // index 0  "string2", // index 1  "string3", // index 2  }對(duì)于像 python 這樣的語言來說,這很容易,只需執(zhí)行 MyData[1] 之類的操作即可獲得 "string2" 和 MyData.index("string2") 以獲得 1。一些可能的解決方案是編寫我自己的函數(shù)以通過迭代數(shù)組/切片來獲取索引對(duì)數(shù)組/切片進(jìn)行排序并使用搜索函數(shù)返回索引(盡管這不允許未排序的序列,這是我更喜歡的)維護(hù)一個(gè)映射和一個(gè)彼此鏡像的數(shù)組,這很容易出錯(cuò)。說到地圖,可以訪問特定值的鍵嗎?然后我可以簡單地?fù)碛幸粋€(gè)如下所示的地圖,并且能夠在提供 int 值時(shí)獲取字符串鍵。var MyData = map[string]int {  "string1": 0,  "string2": 1,  "string3": 2,}更新:在我接受我的答案之前,我想更徹底地解釋這個(gè)問題,我知道這一定是相當(dāng)普遍的。我基本上有一組常量字符串(例如國家/地區(qū)列表),每個(gè)字符串都有一個(gè)關(guān)聯(lián)的整數(shù)值。在我的數(shù)據(jù)庫中,我只是存儲(chǔ)整數(shù)以節(jié)省空間,因?yàn)橛袛?shù)百萬個(gè)條目。但是當(dāng)我顯示數(shù)據(jù)庫中的條目時(shí),我需要顯示字符串值以便用戶可讀。一個(gè)簡單的數(shù)組就可以做到這一點(diǎn)。但是,我還需要向數(shù)據(jù)庫添加條目(例如一個(gè)新人及其居住的國家/地區(qū)),并且在這種情況下需要從以表格形式輸入的國家/地區(qū)字符串轉(zhuǎn)換為該整數(shù)值。同樣,這只是一個(gè)示例用例,但是目標(biāo)保持不變。我需要一個(gè)可以在字符串值和枚舉的 int 值之間雙向轉(zhuǎn)換的表。最明顯的事情是維護(hù)一個(gè)數(shù)組(用于 int 到字符串的轉(zhuǎn)換)和一個(gè)映射(用于字符串到 int 的轉(zhuǎn)換)。我不想手動(dòng)維護(hù)這兩個(gè)變量,因?yàn)檫@很容易出錯(cuò)。所以我下面的解決方案是只維護(hù)一個(gè)數(shù)組,并在程序第一次運(yùn)行時(shí)讓構(gòu)造函數(shù)方法在運(yùn)行時(shí)自動(dòng)構(gòu)建映射。這樣做的優(yōu)點(diǎn)是,當(dāng)我根據(jù)字符串(這是另一個(gè)建議的解決方案)獲取整數(shù)值時(shí),不需要遍歷整個(gè)數(shù)組。
查看完整描述

3 回答

?
catspeake

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

在這兩種情況下,您都應(yīng)該使用內(nèi)置的 range 函數(shù)。


for k, v := range MyData {

}



for i, v := range ThisArray {

}



for i, _ := range ThisArrayIndexOnly {

    value := ThisArrayIndexOnly[i]

}

您可以在此range基礎(chǔ)上構(gòu)建輔助函數(shù)或任何您喜歡的功能,但從根本上說,它是可用于訪問該數(shù)據(jù)的機(jī)制。如果你想要一個(gè)“indexof”函數(shù),那就是


for i, v := range ArrayPassedIntoFunction {

     if v == ValuePassedIntoFunction {

          return i

     }

}

return -1

為了獲得價(jià)值,您當(dāng)然只需MyArray[i]包括邊界檢查或其他任何內(nèi)容。請(qǐng)注意,上面的偽代碼的編寫風(fēng)格表明它是一個(gè)數(shù)組,但實(shí)際上相同的代碼適用于地圖,我通常只使用 var 名稱k而不是i.


查看完整回答
反對(duì) 回復(fù) 2021-11-01
?
拉風(fēng)的咖菲貓

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

假設(shè)你想在數(shù)組的數(shù)據(jù)中獲取單詞的索引


data := [...] {"one","two","three"}

或定長數(shù)組


data := [3] {"one","two","three"}

創(chuàng)建函數(shù)


func indexOf(word string, data []string) (int) {

    for k, v := range data {

        if word == v {

            return k

        }

    }

    return -1

}

從上面的函數(shù)中獲取值,匹配類型,傳遞數(shù)組array[:]如下


fmt.Println(indexOf("two", data[:]))


查看完整回答
反對(duì) 回復(fù) 2021-11-01
?
眼眸繁星

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

這是我之前提到的一個(gè)解決方案,它適用于靜態(tài)切片(這是我的用例)。每次我想要一個(gè)值的索引時(shí)迭代切片都會(huì)增加不必要的延遲,特別是因?yàn)槲业臄?shù)據(jù)在運(yùn)行時(shí)是靜態(tài)的。這只是創(chuàng)建一個(gè)結(jié)構(gòu)體,它初始化切片并創(chuàng)建相應(yīng)的逆映射。然后我將使用 GetKey 和 GetVal 方法通過提供 int 'value' 來獲取字符串 'key',或者通過提供字符串 'key' 來獲取 int 'value'。也許已經(jīng)有一種方法可以在 Go 中獲取地圖特定值的鍵。


type MyData struct {

    dataslice []string

    datamap map[string]int

}


func NewMyData() *MyData {

    m := new(MyData)

    m.dataslice= []string {

        "string1",

        "string2",

        "string3",

    }

    m.datamap = make(map[string]int)

    for x := range m.dataslice {

        m.datamap[m.dataslice[x]] = x

    }

    return m

}


func (m *MyData) GetKey(x int) string {

    return m.dataslice[x]

}


func (m *MyData) GetVal(x string) int {

    return m.datamap[x]

}


查看完整回答
反對(duì) 回復(fù) 2021-11-01
  • 3 回答
  • 0 關(guān)注
  • 414 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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