3 回答
TA贡献1111条经验 获得超0个赞
在这两种情况下,您都应该使用内置的 range 函数。
for k, v := range MyData {
}
for i, v := range ThisArray {
}
for i, _ := range ThisArrayIndexOnly {
value := ThisArrayIndexOnly[i]
}
您可以在此range基础上构建辅助函数或任何您喜欢的功能,但从根本上说,它是可用于访问该数据的机制。如果你想要一个“indexof”函数,那就是
for i, v := range ArrayPassedIntoFunction {
if v == ValuePassedIntoFunction {
return i
}
}
return -1
为了获得价值,您当然只需MyArray[i]包括边界检查或其他任何内容。请注意,上面的伪代码的编写风格表明它是一个数组,但实际上相同的代码适用于地图,我通常只使用 var 名称k而不是i.
TA贡献1995条经验 获得超2个赞
假设你想在数组的数据中获取单词的索引
data := [...] {"one","two","three"}
或定长数组
data := [3] {"one","two","three"}
创建函数
func indexOf(word string, data []string) (int) {
for k, v := range data {
if word == v {
return k
}
}
return -1
}
从上面的函数中获取值,匹配类型,传递数组array[:]如下
fmt.Println(indexOf("two", data[:]))
TA贡献1873条经验 获得超9个赞
这是我之前提到的一个解决方案,它适用于静态切片(这是我的用例)。每次我想要一个值的索引时迭代切片都会增加不必要的延迟,特别是因为我的数据在运行时是静态的。这只是创建一个结构体,它初始化切片并创建相应的逆映射。然后我将使用 GetKey 和 GetVal 方法通过提供 int 'value' 来获取字符串 'key',或者通过提供字符串 'key' 来获取 int 'value'。也许已经有一种方法可以在 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 关注
- 383 浏览
添加回答
举报