递归索引任意嵌套的切片/数组
I'm looking for the go equivalent of something like the below python snippet
indexes = [0,4]
nestedArray = [[1,2,3,4,5],[6,7,8]] # could be [][][]string, [][][][]float.. etc
def getNestedIndex(nestedArray, indexes):
curr = nestedArray
while indexes {
curr = nestedArray[indexes.pop(0)]
}
return curr # should be 5
I tried something like this
func nestedArrayIndex(slice []interface{}, indexes []int) interface{} {
if len(indexes) == 1 {
return slice[indexes[0]]
}
var newSlice []interface{}
newSlice = slice[indexes[0]]
return nestedArrayIndex(newSlice, indexes[1:])
}
but two things occur here - []Type != []interface{}
and [][]..Type
definitely won't work here.
Wondering if there's a way to achieve this in go?
我正在寻找与下面的python代码段类似的东西 p>
我尝试过类似的操作 p>
,但此处发生两件事- 想知道是否有办法实现这一目标? p>
div> indexes = [0,4]
nestedArray = [[1,2,3,4,5],[6,7,8]]#可以是[] [] []字符串,[] [ ] [] [] float..etc
def getNestedIndex(nestedArray,index):
curr = nestedArray
而索引{
curr = nestedArray [indexes.pop(0)]
}
return curr#应该是 5
code> pre>
func nestedArrayIndex(slice [] interface {},index [] int)interface {} {
如果len(indexes)== 1 {
返回slice [indexes [0]]
}
var newSlice [] interface {}
newSlice = slice [indexes [0]]
返回nestedArrayIndex(newSlice,indexs [1:])
}
code> pre>
[] Type!= [] interface {} code>和
[] [] .. Type code>在这里肯定行不通。 p>
You can do that with reflect
. reflect.Value
has a method Index
for getting the item of the index in the slice underlying the Value
.
func nestedArrayIndex(slice interface{}, indexes []int) interface{} {
v := reflect.ValueOf(slice)
for _, i := range indexes {
v = v.Index(i)
}
return v.Interface()
}
Playground: https://play.golang.org/p/Tmdomx18qPg