3 回答

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.

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[:]))

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]
}
- 3 回答
- 0 關(guān)注
- 414 瀏覽
添加回答
舉報(bào)